URL: https://www.overclockers.at/coding-stuff/cganze_woerter_aus_textfile_auslesen_165512/page_1 - zur Vollversion wechseln!
Ich würde gerne bestimmte wörter aus einem textfile auslesen. Gibts dafür vielleicht schon ausprogrammierte funktionen? Mit C kann man ja leider nur zeichenweise das Textfile auslesen.
Hier is mein versuch das wort BEGIN auszulesen - aber es is leider fehlerhaft...
Code:datei=fopen("C:\\psinfo.log", "r"); //zdatei=fopen(zfilename, "w"); do //for(z=0; z<1000000; z++) { x=fgetc(datei); //fputc(x,zdatei); if(x=='B') { y=1; puff[0]=x; } if(y==1 && x=='E') { y=2; puff[1]=x; } if(y==2 && x=='G') { y=3; puff[2]=x; } if(y==3 && x=='I') { y=4; puff[3]=x; } if(y==4 && x=='N') { y=5; puff[4]=x; i++; } //printf("%c", x); }while(x!=EOF);
Meine Programmierzeit ist zwar schon etwas länger her, aber das is ja extrem umständlich programmiert, von der Tatsache dass man jedesmal wenn man nach nem anderen Wort suchen will, den Code umschreiben muss.
Versuch mal das ganze in ner for-Schleife zu lösen indem du y als Index der variabel puff verwendest. dann könntest du die Länge des Wortes nämlich variabel machen.
Wenn die Wörter durch Leerzeichen getrennt sind, dann kannst du z.B. so etwas in der Art verwenden:
Code:#include <stdio.h> #include <string.h> int find_word(FILE *f, char *word_to_find) { char buffer[512]; while (fscanf(f, "%511s", buffer) > 0) { if (!strcmp(buffer, word_to_find)) { return 1; } } return 0; } int main() { FILE *f = fopen("test.txt","r"); if (find_word(f, "BEGIN")) { printf("Found!"); } fclose(f); return 0; }
Warum? Was würde passieren, wenn man "texttexttext Wort1 Wort2 texttexttext" mit strstr nach "Wort1 Wort2" durchsucht?Zitat von gueWenn keine Leerzeichen dazwischen sind: Puffer einlesen und beispielsweise mit strstr suchen.
Das hat nichts damit zu tun aber wenn Leerzeichen dazwischen sind, dann kann man mit fscanf den Stream nach Wörtern abscannen, wenn der Text z.B. "1212414BEGINInformation" ist, dann findet man mit der von mir geposteten Funktion das BEGIN nicht raus.Zitat von jivesWarum? Was würde passieren, wenn man "texttexttext Wort1 Wort2 texttexttext" mit strstr nach "Wort1 Wort2" durchsucht?
eine - vielleicht - blöde Frage, wieso liest du den Fileinhalt nicht in ein Array und suchst dir dann nach deinen Kriterien raus, was du brauchst?
pong
also ich wüsste jetzt nicht wie ich das einfacher anstellen könnte. Abgesehen davon wäre das dann ein array mit 1 Million zeichen *g*Zitat von pongeine - vielleicht - blöde Frage, wieso liest du den Fileinhalt nicht in ein Array und suchst dir dann nach deinen Kriterien raus, was du brauchst?
pong
http://www.galileocomputing.de/open...4002BFB1F04418C
@ gue
also ich hab den code mal versucht und er funktioniert ja eigentlich - nur dass er immer nur das aller erste Wort findet - in meinem file gibt es viel mehr BEGIN's (und ENDE's und lauter solche wörter )
Ich hab versucht den code abzuändern dass er irgendwie weitersucht, aber habs leider nicht geschafft - hättest du einen vorschlag?
@strstr methode: geht net das erkennt nämlich auch nur das aller erste BEGIN
@Luzandro, danke der link ist sehr informativ und man kann bestimmt viel lernen (hab mich etwas durchgeblättert und mal auf die schnelle strukturen gelernt). Nur leider ist der code für mich etwas schwerer zu verstehen (strukturen zb) was aber das schlimmste ist; er funktioniert nicht^^.
Das programm schließt sich gleich nach dem ausführen, ein getch(); am schluss hilft auch net.
Zitat von Burschi1620was aber das schlimmste ist; er funktioniert nicht^^
Code:$ echo "esr erBEGINdsf eraer > sareas ewrera BEGIN sdresr" > test $ ./bruteforce BEGIN test Datei "test": Pos. 6, in Zeile 1 Pos. 14, in Zeile 2 Suchergebnisse in "test": 2 ---------------------------------------
Burschi: Wär interessant, was du machen willst. Laut dem Code, den du da gepostet hast, willst du zählen, wie oft ein Wort, z.B. BEGIN, vorkommt. Weil ich sowieso grad mit einem Gipsfuß an den Computer gefesselt bin () hab ich dir meinen Code mal so angepasst:
Code:#include <stdio.h> #include <string.h> int find_word(FILE *f, char *word_to_find) { char buffer[512]; while (fscanf(f, "%511s", buffer) > 0) { if (!strcmp(buffer, word_to_find)) { return 1; } } return 0; } void occurrences(FILE *f, char *s) { int i = 0; fseek(f, 0L, SEEK_SET); while (find_word(f, s)) { i++; } printf("Found %d occurrence%sof %s\n", i, i != 1 ? "s ": " ", s); } int main() { FILE *f = fopen("test.txt", "r"); occurrences(f, "BEGIN"); occurrences(f, "END"); fclose(f); return 0; }
und wo ist das problem? (abgesehen davon, dass dort auch innerhalb der wörter gesucht wird)
@luzandro ich werd mal den code mit einem anderen compiler versuchen, vielleicht gehts ja dann.
Ich muss aus einer Textdatei daten rausziehen und diese dann in tabellenform in ein anderes textfile schreiben.
Die textdatei umfasst etwa 300 PCs; jeder einzelne PC wird durch ein "BEGIN" und ein "ENDE" begrenzt. am wichtigsten sind die "patches", vor allem müssen die in der tabelle eingetragen werden.
Sieht etwa so aus:
****** PC NAME BEGIN ******
Blaa fuer PC NAME ist gestartet worden
Verbinde to PC NAME...
System information for \\PC NAME:
Uptime: 325446345 Tage 34343 Minuten....
Pocessors:
PATCHES Installed
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
****** PC NAME ENDE ******
Ich hab mir halt überlegt ich kann wenn ich erstmal nach den wörtern suchen kann mich weiterhanteln zu den andern daten.
Danke für deinen code, würdest du mir bitte das fscanf und das fseek erklären? Ich hab mich zwar um die definitionen von den befehlen umgesehen nur ich verstehs leider nicht
freiwillig mit C? in java würd so ein StringTokenizer würd das leben doch viel viel leichter machen...
hätteste genauere infos? Java kann ich auch ein bisschen (für objekte reichts gerade noch *g*).Zitat von DKCHfreiwillig mit C? in java würd so ein StringTokenizer würd das leben doch viel viel leichter machen...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025