Orioner hat geschrieben:Aus Zeitgründen und weil ich ihn nicht vor den Kopf stoßen will, wie er mich, verzichte ich einmal darauf, auf den Beitrag von cloidnerux einzugehen, obwohl ich sagen muss, dass mich das Lesen dieses Beitrags ganz schön aufgebracht hat. Immerhin, er hat dann doch versucht, mir zu helfen.
Wir sitzen nicht vor Deinem Code, kennen Dein Problem und Deine Fähigkeiten nur von einem kleinen Stückchen Text.
Du fragst nachfolgend, ob der Begriff "parsen" richtig verwendet wird - wird es. Aber entsprechend kann man nur grob einschätzen, wie man Dir Informationen zuspielt - insbesondere, wenn Du auf die falschen Reaktionen offen verärgert reagierst.
Orioner hat geschrieben:Probleme:
- Welchen Datentyp haben die Werte, nachdem sie in der Struktur gelandet sind, bzw. wie sollte die Struktur aussehen? Sind ersteinmal alles Char-Arrays (sprich C-Strings)?
Kommt logischerweise auf Deine Datenstruktur an. Ich würde die entsprechenden Datentypen wählen, damit die Informationen, die erstmal in der Datenstruktur sind, nicht mehr falsch repräsentiert werden können. Als negative Werte sollten entsprechend nicht "b4" möglich sein.
Das geht mit (unsigned int) entsprechend nicht.
Orioner hat geschrieben:
[*]Manche Daten sind Zahlen und lassen sich in Integer verwandeln, aber nicht alle. Bei manchen Werten steht nur ein Bindestrich. Die sollen auf einen bestimmten Wert gesetzt werden, mit dem ich dann rechnen kann.
Bindestrich mit strcmp vergleichen und ggfs. den Defaultwert in die Struktur schreiben.
Orioner hat geschrieben:
[*]Nun kann man ja, wie
hier beschrieben, Strings in Tokens zerlegen; das sieht dann in C u. a. so aus:
Code: Alles auswählen
pch = strtok( str, " ,.-" );
while( pch != NULL )
{
printf( "%s\n", pch );
pch = strtok( NULL, " ,.-" );
}
Es gibt ein paar Dinge, die ich daran nicht verstehe:
Beim ersten Aufruf von strtok steht in der Klammer der String ("str"). Beim zweiten Aufruf (innerhalb der While-Schleife) steht "NULL".
- Warum wird strtok zwei Mal aufgerufen und nicht nur einmal, nämlich innerhalb einer Schleife?
- Warum wird strtok einmal mit str und einmal mit NULL als Parameter aufgerufen?
strtok merkt sich die Position, wo es aufgehört hat, nach Tokens zu suchen. Übergibst Du NULL wird an der Stelle weitergesucht.
Orioner hat geschrieben:[*]Würdet ihr zuerst die ganze Datei einlesen und dann von Trennzeichen zu Trennzeichen (in meinem Fall ein Semikolon), separieren oder würdet ihr die Datei zeilenweise einlesen und entsprechend separieren (Mit jeder neuen Zeile würde dann in das nächste Element der Feldvariablen (der Struktur) gespeichert werden.)
Ich habe mir eine C++-Klasse geschrieben, die mich verhältnismäßig einfach durch ein File parsen lässt. Diese lädt das komplette File, da ich - im Gegensatz zu Dir - nicht davon ausgehen kann, dass Datensätze zeilenweise übergeben werden.
Zeilenweise hat den Vorteil, dass Du beliebig große Dateien einlesen kannst und den Nachteil, dass Du immerwieder kleine Stückchen einlesen musst.
Orioner hat geschrieben:Vielleicht bin ich mit meinem Anliegen ja auch falsch, in diesem Forum (z. B. weil hier andere Arten von Problemen diskutiert werden). Dann wäre ein freundlicher Hinweis angebracht. Anderen Falls folgen weitere Details zu meinem Problem/Programm (vor allem auf Anfrage, da ich atm nicht weiß, was ich noch schreiben soll).
Falsch bist Du hier nicht. Aber vielleicht ist die Erwartung falsch.
Wenn ich jemanden um Hilfe bitte, dann helfe ich dieser Person mir zu helfen, denn niemand ist verpflichtet, Dir zu helfen. Wir machen das freiwillig, ohne Bezahlung und ohne eigenen Nutzen. Entsprechend ist die Motivation, dass der Fragende entsprechend auftritt und nicht nur seine Probleme präsentiert und dann von den anderen erwartet, dass sie aus irgendeiner Kristallkugel sofort die perfekte Lösung liefern.
Also freu Dich, wenn Dir jemand helfen kann, statt Dich darüber aufzuregen, wenn Dich jemand nicht sofort richtig versteht.