Text Datei einlesen und verarbeiten, Trennzeichen bei string wird ignoriert

MartinFS

Mitglied
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.
Code:
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
2620,33,43
2620,34,6
Code:
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).
 
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
 
umbrasaxum hat gesagt.:
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
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
 
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
 
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?
 
moin


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


mfg
umbrasaxum
 
Zuletzt bearbeitet:
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
 
Zurück