Textdatei auslesen und eine andere Textdatei schreiben?
-
azoul schrieb:
hallo B.B.
das Programm springt nie in dieser if Anweisung rein?
...
weisst du wo das problem liegt?Das ist gut möglich, das hängt von deiner Datei verkehrsdaten.txt ab.
Angenommen, dort gibt es eine Zeile, die so aussieht:
A 192.168.0.84 5996 192.168.0.221 5890 0 user0 useraUnd irgendwo weiter unten gibt es eine Zeile, die so aussieht:
E 192.168.0.84 5996 192.168.0.221 5890 0 user0 useraDann springt das Programm da auch rein. Sobald sich die Zeile aber mehr als nur um den einen Buchstaben, das 'E' unterscheidet, wird dort auch nicht reingehüpft.
-
die datei verkehrsdaten sieht so aus: z.B
A 192.168.0.84 6500 192.168.0.221 6380 0 user user1 A 192.168.0.84 6500 192.168.0.221 6380 0 user user1 A 192.168.0.84 6500 192.168.0.221 6380 0 user user1 E 192.168.0.84 6500 192.168.0.221 6380 user user1 A 192.168.0.123 5062 192.168.0.121 10014 8 user3 user4 A 192.168.0.84 6502 192.168.0.221 6382 0 user user1 A 192.168.0.84 6502 192.168.0.221 6382 0 user user1 A 192.168.0.84 6502 192.168.0.221 6382 0 user user1 E 192.168.0.84 6502 192.168.0.221 6382 user user1 E 192.168.0.123 5062 192.168.0.121 10014 user3 user4warum funktioniert dann nicht, obwohl die E Zeile immer nach A Zeile kommt??
-
Weil in deinen E-Zeilen die Codec-Nummern fehlen.
-
das habe ich auch vermutet muss damit morgen versuchen.
-
Kannst ja die Zeilen mit sscanf zerlegen, dann kannst du dir jedes einzelne Bestandteil einer Zeile angucken.
Wieso morgen erst, has du keinen Compiler zu hause ?
Und das so kurz vor der Abgabe !
-
B.B. schrieb:
has du keinen Compiler zu hause ?nein nicht deswegen brauche dafür meine ganze analyseplattform (Server telefone ...muss alles automatisch funktionieren) und das habe ich nicht zuhause
habe eben andere frage rein was mit zeitstempel wenn du mal eine idee hast?
danke noch mal für hilfe..
-
Naja, diese verkehrsdaten.txt-Geschichte, die könntest du doch auch zu Hause zum laufen kriegen.
Brauchst ja nur ne Textdatei mit deinen AE-Strings.
-
ja schon, habe ich versucht mit der Dev-C++ Compiler versucht aber irgendwie klappt nicht bekomme ein paar wahrnungen dafür habe keine lösung gefunden..deswegen
-
azoul schrieb:
ja schon, habe ich versucht mit der Dev-C++ Compiler versucht aber irgendwie klappt nicht bekomme ein paar wahrnungen dafür habe keine lösung gefunden..deswegen
Was für Warnungen denn? Warnungen sind keine Fehler und eventuell ganz unkritisch.
-
hallo B.B.
habe ich heute morgen versucht, hat alles geklappt. da ich Änderungen an Verkehrsdaten gemacht habe also das Codec zu 'E' zeile manuell hinzugefügt habe.
das problem jetzt ist es so: das codec könnte nur für 'A' zeile (nur am Anfang der telefonat werden die Codecs zwischen zwei user ausgehandelt) ausgelesen wird. am Ende der Telefonat werden keine Codecs ausgehandelt das hat zu folge dass das Codec in 'E' zeile nicht auftaucht. was kann ich an dem C-code ändern, dass das trotzdem funktioniert.
-
Du kannst die Zeilen in einzelne Komponenten aufteilen und diejenigen, die dich interessieren, miteinander vergleichen.
-
habe gemeint im C-code, der du gschrieben und geschickt hast. was kann ich da machen?
-
Natürlich im C-Code, wo denn sonst. An der Position, wo die Zeilen eingelesen werden, kannst du diese mit
sscanf ( A, "%s %s %s %s %s %s %s %s", AoE, ipA1, ipA2, portA1, portA2, codec, nameA1, nameA2 ); sscanf ( B, "%s %s %s %s %s %s %s %s", AoE, ipE1, ipE2, portE1, portE2,nameE1, nameE2 );aufteilen. Und dann kannst du die einzelnen char-Arrays, die dich interessieren, vergleichen.
Z.B.if ( strcmp ( ipA1, ipE1 ) == 0 && strcmp ( ipA2, ipE2 ) == 0 && ... // usw.
-
jetzt macht er das , aber er liest nur das erste paar von der textdatei verkehrsdaten dann hört er auf weiter zu machen..
-
Geh doch mal für jede Zeile mit nem Debugger durch, dann findest du schon den Grund.
-
funktioniert aber gibt nur die A zeile und E Zeile mit gleicher Inhalt, die nacheinander vorkommen,aus. wenn aber eine andere A Zeile dazwischen kommt dann wird ie erste A zeile mit der zweiten überschrieben. also ein Beispiel:
wenn so aussieht:
A 192.168.0.84 6516 192.168.0.221 6396 0 user user1
A 192.168.0.84 6516 192.168.0.221 6396 0 user user1
A 192.168.0.84 6516 192.168.0.221 6396 0 user user1
E 192.168.0.84 6516 192.168.0.221 6396 user user1
A 192.168.0.121 10020 192.168.0.123 5062 8 user3 user4
A 192.168.0.121 10020 192.168.0.123 5062 8 user3 user4
A 192.168.0.121 10020 192.168.0.123 5062 8 user3 user4
E 192.168.0.121 10020 192.168.0.123 5062 user3 user4funktioniert einwandfrei...!!
wenn so aussieht:
A 192.168.0.84 6516 192.168.0.221 6396 0 khalid user1
A 192.168.0.84 6516 192.168.0.221 6396 0 khalid user1
A 192.168.0.84 6516 192.168.0.221 6396 0 khalid user1
A 192.168.0.121 10020 192.168.0.123 5062 8 user3 user4
E 192.168.0.84 6516 192.168.0.221 6396 khalid user1
E 192.168.0.121 10020 192.168.0.123 5062 user3 user4dann geht leider nicht.. und er schreibt das in textdatei Feld.txt
A 192.168.0.84 6516 192.168.0.221 6396 0 khalid user1
E 192.168.0.84 6516 192.168.0.221 6396 0 khalid user1
A 192.168.0.84 6516 192.168.0.221 6396 khalid user1
E 192.168.0.121 10020 192.168.0.123 5062 8 user3 user4also die richtige A zeile für die letzte E zeile hat er nicht ausgegeben.?
sorry...
-
Nö, es ist egal, wie viele A- oder E-Zeilen dazwischen liegen. Auch die letzte E-Zeile wird berücksichtigt (liest bis EOF).
Ich kann ja von hier schlecht raten, was du da jetzt getippt hast, ne.
Vielleicht sind dir auch nur beim Erstellen deiner Testdatei ausversehen ein paar Leerzeichen bei einigen Zeilen hinten dazugekommen und bei einigen nicht, oder so.
-
Big Brother schrieb:
Ich kann ja von hier schlecht raten, was du da jetzt getippt hast, ne.
ich habe gar nix fetippt ausser die Änderung mit Vergleich mehr nicht..
sscanf ( A, "%s %s %s %s %s %s %s %s", AoE, Aip1, Aip2, Aport1, Aport2, codec, Aname1, Aname2 ); sscanf ( B, "%s %s %s %s %s %s %s %s", AoE, Eip1, Eip2, Eport1, Eport2, Ename1, Ename2 ); if ( strcmp(Aip1, Eip1) == 0 && strcmp(Aip2, Eip2) == 0 && strcmp( Aport1, Eport1) == 0 && strcmp(Aport2, Eport2) == 0 && strcmp(Aname1, Ename1) == 0 && strcmp( Aname2, Ename2 ) == 0 )
-
azoul schrieb:
...ich habe gar nix fetippt ausser die Änderung mit Vergleich mehr nicht..
Du überschreibst mit sscanf ( B, .. die vorher eingelesenen Werte wieder, weil du die selben Variablen benutzt.
Und das: strcmp(ip1, ip1) überdenke in Ruhe noch einmal.
-
azoul schrieb:
ich habe gar nix fetippt ausser die Änderung mit Vergleich ...
Das hat ja offensichtlich schon gereicht!
azoul schrieb:
..mehr nicht..
Na, Gott sein Dank!
