[C]Dateiinhalt auslesen, neue Abätze aber nicht.
-
Hallo,
ich hab folgendes Problem.
Ich lese ganz normal den Inhalt einer Datei aus. Jede zeile wird dann einzeln in einem String gespeichert.Die *.txt Datei sieht in etwa so aus.
[URL] http://www.google.de [CONTROL] TAB [INPUT] Irgendein Text [CONTROL] ENTER
Nun hab ich das Problem das der neue Absatz nach z.B. "Irgendein Text"
auch mit ausgegeben wird.Dies will ich allerdings nicht. Gibt es da eine Möglichkeit das ich nur bis zum letzten Zeichen lesen kann? Hab da schon irgendwie an strstr(); gedacht. Aber bisher kam nix braucbbares dabei raus.
Danke schonmal für die Hilfe.
mfg
bethebe
-
Du willst leere Zeilen überspringen? Was ist das Problem dabei? Leere Zeilen kannst du daran erkennen, dass sie leer sind.
edit: Aber irgendwie glaube ich, ich habe dich falsch verstanden. Wie sieht denn deine Ausgabe aus (zeigen, nicht beschreiben!) und wie soll sie aussehen?
-
Naja, dacht ich mir eigentlich auch.
Allerdings sieht schon etwas komplizierter aus bei dem was ich vorhabe.Würd fast den Rahmen sprengen wenn ich das alles dazu schreibe.
Ich versuch ma zu erklären was mein Programm macht.1. .txt Datei wird eingelesen und In Strings gespeichert.
2. Wir geprüft ob die Zeilen wie
[URL][INPUT[CONTROL] Vorhanden sind.
Falls ja werden bestimmt Funktionen ausgeführt.Sobald eins dieser in [] geschrieben Sachen gefunden wird springt mein Prgramme eine Zeile weiter und Verabreitet die nächste Zeile
bei [URL] würde er in dem Beispiel die Seite www.google.de öffnen
bei
[CONTROL]
TABwirde die Tab taste gedrückt, per tasten simulation. aber das ist ein anderes Thema.
bei
[INPUT]
Irgendein TextWird diesen Text z.b. in Notepad getippt. Ebenfalls per tastensimulation.
Nun ist nur das Problem das er nicht am letzten Buchstaben aufhört zu schreiben sonder eben die Return taste noch mit simuliert.Das nur mal so als kleine Erklärung. Wollte es eigentlich nicht so umfangreich machen. Und bitte nicht verschieben. Es geht nicht um WINAPI. Es geht nur drum das der Text den ich auslese eben nur bis zum letzten Zeichen im String gespeichert wird, eben ohne den Absatz.
EDIT: Erst grade dein Edit gesehen.
Ich könnte auch das gesamte Progarmm posten allerdings ist dies inzwichen etwas Größer^^
-
bethebe schrieb:
Das nur mal so als kleine Erklärung. Wollte es eigentlich nicht so umfangreich machen. Und bitte nicht verschieben. Es geht nicht um WINAPI. Es geht nur drum das der Text den ich auslese eben nur bis zum letzten Zeichen im String gespeichert wird, eben ohne den Absatz.
Und eben hier verstehe ich nicht, was du meinst. Ist ein abschließendes newline im String?
EDIT: Erst grade dein Edit gesehen.
Ich könnte auch das gesamte Progarmm posten allerdings ist dies inzwichen etwas Größer^^Nein, lass mal, sondern zeig was du willst. Und eventuell auch noch womit du einliest.
-
Und eben hier verstehe ich nicht, was du meinst. Ist ein abschließendes newline im String?
Ne, das dacht ich auch erst das ich das ausversehen mit reingehauen hab. Aber ist nicht so.
Hier mal den Teil an dem die Datei geöffnet wir + die Funktionen:
f=fopen(filename,"r"); if(f == NULL) { printf("Datei %s konnte nicht geoeffnet werden!",filename); } while( fgets(record, sizeof(record), f) != 0) { if((strstr(record, cmd_url)) != 0) { function_url(); } if((strstr(record, cmd_input)) != 0) { function_input(); } if((strstr(record, cmd_control)) != 0) { function_control(); } } fclose(f);
//URL void function_url() { while( fgets(record, sizeof(record), f) != 0) { if((strlen(record)) == 1) return; ShellExecute(NULL, "open", record, NULL, NULL, SW_MAXIMIZE); Sleep(3000); } }
//SCHREIBEN void function_input() { while( fgets(record, sizeof(record), f) != 0) { if((strlen(record)) == 1) return; { schreiben(record); } }
//CONTROL-TASTEN void function_control() { while( fgets(record, sizeof(record), f) != 0) { if((strlen(record)) == 1) return; if(strstr(record, "TAB")) { keybd_event(VK_TAB,0x9,0,0); keybd_event(VK_TAB,0x9,KEYEVENTF_KEYUP,0); Sleep(300); } if(strstr(record, "SPACE")) { keybd_event(VK_SPACE,0x20,0,0); keybd_event(VK_SPACE,0x20,KEYEVENTF_KEYUP,0); Sleep(300); } if(strstr(record, "ENTER")) { keybd_event(VK_RETURN,0x0D,0,0); keybd_event(VK_RETURN,0x0D,KEYEVENTF_KEYUP,0); Sleep(300); } } }
-
Ich nochmal. Gibt es vielleicht ein Möglichkeit die Steuerzeichen zu entfernen?
Also soll ja das „Carriage Return“ + „Line Feed“. War ne Idee von meinem Chef. Der weiß aber auch nix genaueres.
-
Ja, es gibt sogar mehrere Varianten, ein \n aus einem String zu entfernen.
Du solltest dich auch mal entscheiden, ob du nun den gesamten Dateiinhalt in Strings speichern willst und dann darin suchst oder ob du jedesmal die Datei erneut komplett lesen willst. Die ziemliche Konfusion deiner Frage lässt jedenfalls keine klare Linie erkennen.
-
Du brauchst strchr(...) oder strrchr(...).
-
strrchr(...)
war die richtig Lösung, danke dafür. ich ersetzte nun einfach \n durch \0
und schon läufts wie gewünscht.Ja meine Frage war etwas verwirrend, hab ich mir im nachhinein auchgedacht, aber Sie wurde ja doch irgendwie verstanden