Guten Morgen in meiner C Anwendung kann ich eine Textdatei einlesen und
auch zeilenweise ausgeben. Nun habe ich ein Problem wie ich zum Beispiel
eine in einer Zeile zu einer bestimmten Stelle springen kann um dann die
Werte in einen Puffer zu speichern.
Zeile:
Der Ansatz von Teoderix funktioniert nur, wenn die Elemente, die vor dem
gesuchten Text stehen, immer exakt die gleiche Länge haben. Bei der
Uhrzeit kann man davon ausgehen, beim Datum ist hingegen schon unsicher,
ob führende Nullen verwendet werden. Steht da "01.05.2023" oder
"1.5.2023"?
Abhilfe: Untersuche die Struktur der Zeile.
Es sieht so aus, als ob der gewünschte Text zwischen dem dritten und
vierten Semikolon zu finden ist.
strchr durchsucht einen String nach dem Vorkommen eines Zeichens und
gibt einen Pointer darauf (oder NULL) zurück.
Also musst Du das dritte und vierte Semikolon suchen und den Text
dazwischen bestimmen.
Teo D. schrieb:> Funst garnicht.
Ich hatte --in dubio und so-- nicht angenommen, daß die verquaste
Schleife da einfach nur Getrolle ist. Solches Gewurschtel untersuche ich
nicht genauer.
Mein Punkt aber bleibt valide, und trifft den Ansatz von "udok" genauso.
Der string ändert sich ja von der ANzahl der Zeichen wenn die Nummer >1
wird.
WIe kann ich dann an einer bestimmten Stelle springen um dann die Daten
zu entnehmen?
Kommt halt drauf an, was an denen Zeilen fest bleibt: für Anzahl der
Zahlen, Doppelpunkte, Semikolone?
An irgendetwas muss man doch festmachen kommen, wonach du suchst.
Mo schrieb:> WIe kann ich dann an einer bestimmten Stelle springen um dann die Daten> zu entnehmen?
Indem Du nach der Stelle suchst. Die Anzahl der Semikola vor dem
gewünschten Text ändert sich ja wohl nicht, oder?
Also musst Du dreimal nacheinander ein Semikolon suchen.
Mo schrieb:> WIe kann ich dann an einer bestimmten Stelle springen um dann die Daten> zu entnehmen?
Mit Zeigeraritmethik
Dann hat man aber immer noch den Rest.
Dirk B. schrieb:> Das Format hat sich zwischendurch geändert.
Praktisch.
Wie auch immer, der interessante Text steht also zwischen dem fünften
und sechsten Semikolon.
Jetzt kann man entweder nach dem fünften Semikolon suchen und alle
Zeichen bis zum sechsten Semikolon extrahieren, oder aber man schreibt
den Kram etwas generischer und zerlegt den String in alle durch Semikola
getrennte Bestandteile, die man sich irgendwo aufhebt und dann nach Lust
und Laune auswerten kann.
Iterieren mit strtok wäre auch noch eine Möglichkeit, wenn es OK ist,
daß der Quellstring zerstört wird.
Dirk B. schrieb:> Du kannst auch strtok_r() benutzen, das verändert aber deinen> Ausgangsstring.
viel zu modern :)
die Fehlersuche macht mit dem originalen strtok viel mehr Spaß
Ich würde das einfach mit regulären Ausdrücken suchen.
";[0-9]{1,2} " + 1 -> findet Position des ersten Wertes
" [0-9]{1,2};" -> findet Position des letzten Wertes
Je nachdem, wie lang (2 oder 3 Zeichen) die zweite Position
ist, kann man den String exakt ausschneiden, egal, ob es nun
1 - oder 2stellige Zahlen sind und auch egal wieviele.
Geht dann einfach mit etwas rechnen.
Bitte das Blank in den Suchausdrücken beachten.
Mo schrieb:> Was ich brauche ist der Dateninhalt
Nö, Du brauchst erstmal eine Protokollbeschreibung, nach der man
Datenbeginn und Ende erkennen kann.
Irgendwer muß ja die Syntax der Textdatei festgelegt haben.
Mo schrieb:> Der string ändert sich ja von der ANzahl der Zeichen wenn die Nummer >1> wird.> WIe kann ich dann an einer bestimmten Stelle springen um dann die Daten> zu entnehmen?
Was ist für dich eine bestimmte Stelle? Durch welche Zeichen oder
Zeichenfolgen zeichnet sie sich aus?
Dein Problem scheint zu sein, daß du einen Input (von wo auch immer)
zeilenweise parsen mußt, um an das zu kommen, was du lesen willst. Kläre
erstmal das erwartete Format der Zeilen und dann sehen wir weiter.
W.S.