[C#] data in een string "isoleren"

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mania-92
  • Registratie: Maart 2006
  • Laatst online: 07:48
[EDIT]Sorry, ben vergeten te vermelden dat het om C# gaat.

Ik heb een file waarin de data via een (of meerdere) spaties verdeeld wordt, bijv zo:
Harry 897 8934 834.09 89945 8234.003
Ik kan de file lijn voor lijn inlezen, nu moet ik de waarden nog "isoleren", ideaal zou het zijn als ik Harry, 897, 8934... allemaal in een aparte variable kan zetten.
Hoe zou ik dit kunnen doen?

[ Voor 8% gewijzigd door Mania-92 op 28-12-2008 22:09 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 10:40

BCC

Split?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Brian
  • Registratie: Oktober 2006
  • Laatst online: 05-08 14:09
Java?
Java:
1
String str[] = "Harry 897 8934 834.09 89945 8234.003".split(" ");

Chinees?
geen idee.

Welke taal ten eerste, en ten tweede, dit soort dingen zijn over het algemeen toch redelijk makkelijk te vinden op Google ;)

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 10:28

krvabo

MATERIALISE!

Het mooiste is uiteraard natuurlijk Wikipedia: Interpreter pattern
Maar als je op dit al foutloopt dan denk ik dat je inderdaad maar gewoon split moet gebruiken :P

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Mania-92
  • Registratie: Maart 2006
  • Laatst online: 07:48
Oh ja sorry C# was het..

Split werkt overigens prima voor een spatie maar soms zijn de delen door meerdere spaties, en aangezien Split() een waarde van het type char verwacht kan ik niet 2 spaties ofzo als argument geven..

Acties:
  • 0 Henk 'm!

  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 09:46
Wat je kunt doen is aamgeven dat je met een spatie wilt splitsen en dat lege entries vewrijderd worden:

C#:
1
String[] splitted = "Harry   897 8934".Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


Acties:
  • 0 Henk 'm!

  • Mania-92
  • Registratie: Maart 2006
  • Laatst online: 07:48
Het werkt helaas nog niet naar behoren, bij bijvoorbeeld deze lijn:
HENK 1234.0 8234.0 32430 932.0 0.0 -0.2
komen de volgende 2 waarden nog bij elkaar:
32430 932.0

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:37

TeeDee

CQB 241

En wat gebruik je nu om te splitten?
C#:
1
2
3
4
5
6
string splittee = "HENK 1234.0    8234.0 32430 932.0 0.0 -0.2";
string[] splitters = splittee.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
foreach (string splitval in splitters)
{
    Console.WriteLine(splitval);
}

Doet bij mij prima 7 items in het Console venster dumpen.

[ Voor 81% gewijzigd door TeeDee op 29-12-2008 20:20 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Supersheep40
  • Registratie: Februari 2001
  • Niet online
Weet je zeker dat tussen die getallen een spatie staat en geen tab of ander onzichtbaar teken? Een splitfunctie slaat nl niet de ene spatie over en de andere niet...

Acties:
  • 0 Henk 'm!

  • Mania-92
  • Registratie: Maart 2006
  • Laatst online: 07:48
TeeDee schreef op maandag 29 december 2008 @ 20:13:
En wat gebruik je nu om te splitten?
C#:
1
2
3
4
5
6
string splittee = "HENK 1234.0    8234.0 32430 932.0 0.0 -0.2";
string[] splitters = splittee.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
foreach (string splitval in splitters)
{
    Console.WriteLine(splitval);
}

Doet bij mij prima 7 items in het Console venster dumpen.
Een afgeleide vorm van het voorbeeld op MSDN gebruikte ik, met dat voorbeeld kreeg ik dit probleem dus:
code:
1
2
3
4
5
6
7
8
9
10
string text = "HENK         1234.0  8234.0   32430  932.0 0.0 -0.2";
            System.Console.WriteLine("Original text: '{0}'", text);

            string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            System.Console.WriteLine("{0} words in text:", words.Length);

            foreach (string s in words)
            {
                    System.Console.WriteLine(s);
            }


Jou code werkt echter prima, ik zie alleen het verschil niet, oftewel waar de fout bij mij ligt? :/

[EDIT]Het komt omdat de string die jij gebruikt veel minder spaties bevat, of een ander teken zoals poster hierboven aangeeft? Iemand enig idee hoe ik dat testen kan?

[ Voor 7% gewijzigd door Mania-92 op 29-12-2008 21:05 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:37

TeeDee

CQB 241

Weet je zeker, zoals gommaar aangeeft, dat het spaties zijn en geen tabs of linebreaks die er ook nog tussen staan?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mania-92 schreef op maandag 29 december 2008 @ 21:01:
[EDIT]Het komt omdat de string die jij gebruikt veel minder spaties bevat, of een ander teken zoals poster hierboven aangeeft?
Nope. Als een string op een bepaald punt niet gesplit wordt dan is het teken dat op die plek op een spatie lijkt gewoon géén spatie. Basta. Dus het is een Tab of whatever, maar alles behalve een spatie.

Probeer eens:
C#:
1
text.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

of iets dergelijks.

[ Voor 27% gewijzigd door RobIII op 29-12-2008 21:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mania-92
  • Registratie: Maart 2006
  • Laatst online: 07:48
RobIII schreef op maandag 29 december 2008 @ 21:05:
[...]

Nope. Als een string op een bepaald punt niet gesplit wordt dan is het teken dat op die plek op een spatie lijkt gewoon géén spatie. Basta. Dus het is een Tab of whatever, maar alles behalve een spatie.

Probeer eens:
C#:
1
text.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

of iets dergelijks.
Je hebt gelijk, het was gewoon geen spatie.. O+

Hartelijk bedankt iig..

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mania-92 schreef op maandag 29 december 2008 @ 21:08:
[...]

Je hebt gelijk, het was gewoon geen spatie.. O+
En wat was het dan wel?

En je beseft dat dat met simpel debuggen (Debuggen: Hoe doe ik dat?) makkelijk zelf had kunnen zien? Ik zeg het maar; mocht het concept debuggen je nog ontgaan zijn ;) Leermomentje dus :P In dit geval had je simpelweg even een dump kunnen maken van je string met ascii-waardes (of in de debugger neuzen) en had je het zeker weten zo gevonden. Als een functie niet doet wat 'ie beweert dan is het 9.999 v.d. 10.000 keer een fout bij jezelf en geen "bug" of whatever; ga altijd eerst bij jezelf na wat er nog kan mankeren.

[ Voor 66% gewijzigd door RobIII op 29-12-2008 21:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1