# Text Datei einlesen und verarbeiten, Trennzeichen bei string wird ignoriert



## MartinFS (19. Mai 2005)

Hallo,

ich möchte aus einer Datei Daten einlesen und in einer strcut speicher.
Als Entwicklungsumgebung kommt der BCB6 zum Einsatz... Programmiersprache also C++.

Die Daten wären z.B.:


> 2620,30,3
> 2620,31,53
> 2620,32,31
> 2620,33,43
> 2620,34,6


Als Trennzeichen ein Komma.

Der entsprechende Code schaut so aus.

```
stream_konfiguration = fopen("konfiguration.txt", "r");
while ((fscanf(stream_konfiguration,"%d,%d,%d\n",&i_1, &i_2, &i_3)) != EOF)
{
lbVerlauf->AddItem(i_1, lbVerlauf);
lbVerlauf->AddItem(i_2, lbVerlauf);
lbVerlauf->AddItem(i_3, lbVerlauf);
}
```
Eingelesen wird mit "fscanf" und Ausgabe in einer ListBox. Soweit funktioniert das auch problemlos.

Allerdings möchte ich nun auch gerne Strings in der Datei haben.
z.B.:


> 2620,30,3
> 2620,31,53
> 2620,32,31
> Ende_Teil_1
> ...




```
stream_konfiguration = fopen("konfiguration.txt", "r");
while ((fscanf(stream_konfiguration,"%s,%s,%s\n",s_1, s_2, s_3)) != EOF)
{
lbVerlauf->AddItem(s_1, lbVerlauf);
lbVerlauf->AddItem(s_2, lbVerlauf);
lbVerlauf->AddItem(s_3, lbVerlauf);
}
```
Jedoch wird das Trennzeichen ',' einfach ignoriert.
Bei der Ausgabe von String s_1 wird immer die komplette Zeile ausgegeben, s_2 und s_3 bleiben leer.

Wo liegt denn da das Problem?

Danke.


gruß,
martin

(Bitte nicht über die teilweise nicht so idealen Variablennamen meckern, die sind erstmal nur zum testen so kurz und nichtssagend).


----------



## Tobias K. (20. Mai 2005)

moin


Ich verstehe nciht ganz wo das Problem ist, funktioniert es nur wenn du mit %d einliesst?
Oder kann er Ende_Teil_1 nciht einlesen?


mfg
umbrasaxum


----------



## MartinFS (20. Mai 2005)

umbrasaxum hat gesagt.:
			
		

> moin
> 
> 
> Ich verstehe nciht ganz wo das Problem ist, funktioniert es nur wenn du mit %d einliesst?
> ...


Moin,

jup, mit %d erkennt er das Trennzeichen.
Da speichert er beim ersten Durchlauf 
2620 in i_1, 30 in i_2 und 3 in i_3

beim zweiten 
2620 in i_1, 31 in i_2 und 53 in i_3

etc..... so wie es sein soll.


Wenn ich die Zeichen aber als Strings (%s) auslesen möchte, erkennt er:
beim ersten Durchlauf
s_1: 2620,30,3
s_2: |
s_3: |

beim zweiten Durchlauf:
s_1: 2620,32,31
s_2: |
s_3: |

beim dritten Durchlauf:
s_1: Ende_Teil_1
s_2: |
s_3: |


etc....

Einlesen tut er alles, jedoch wird das Trennzeichen dabei total ignoriert, so dass die komplette Zeile in s_1 gespeichert wird.



gruß,
martin


----------



## Tobias K. (20. Mai 2005)

moin


Ja dann isses klar.

Er fängt also an einzulesen mit %s und kommt zum _ aber _ zählt als ganz normales Textzeichen, drum gehts auch einfach weiter.
Das Komma funktioniert mit %d, weil ein Komma im Englischen nicht als Trennzeichen für Zahlen gillt, dort isses der Punkt.


mfg
umbrasaxum


----------



## MartinFS (20. Mai 2005)

Ich habe das eigentlich so verstanden, dass er jedes eingelesene Zeichen prüft, ob es dem folgenden Trennzeichen entspricht.


Wenn ich also Strings einlesen will, komme ich an einem Leerzeichen als Trennzeichen nicht vorbei, gelle?


----------



## Tobias K. (20. Mai 2005)

moin


Ich teste das selber mal eben, wie es bei mir geht.


mfg
umbrasaxum


----------



## Tobias K. (20. Mai 2005)

moin


Ja, wie es aussieht musst du ein Leerzeichen nehmen.
Hab ein paar Sachen ausprobiert, aber es wird alles nciht als Trennzeichen akzeptiert.


mfg
umbrasaxum


----------

