DocMartens Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Moin! Ich habe hier ein 20 MB Logfile vor mir, indem ich so einige Einträge ändern muß. Eigentlich eine ganz einfache Sache, denn es wird jeweils die gleiche Zeichenfolge durch eine andere ersetzt. Allerdings würde das mit einem Editor wie Notepad mehrere Tage dauern. Welche andere Möglichkeit gibt es? Zitieren
2-frozen Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Wordpad oder nimm gleich Word, dort kannst du suchen & ersetzen Gruß, 2-frozen Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Mit Word geht's leider auch nicht schneller... Ich bräuchte eine andere Methode, als einen Editor dafür zu verwenden. Zitieren
2-frozen Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Original erstellt von OiProll: <STRONG>Mit Word geht's leider auch nicht schneller... Ich bräuchte eine andere Methode, als einen Editor dafür zu verwenden.</STRONG> ??? Entweder verstehe ich dien problem nicht oder du mich nicht :confused: Du willst eine bestimmte zeichenkette durch eine neue ersetzen? Dann guck dir mal die suchen & ersetzen Funktion an. Dort gibst du die gesuchte ein und eben die "neue". dann sagst du suchen & ersetzen und bei der ersten Abfrage kannst du dann alle ersetzen auswählen, so daß er die 20 MB von ganz alleine bearbeitet ... schneller gehts nun wirklich nicht. 2-frozen Zitieren
Hasi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 schreib dir ein Program (Java, ne besser C++ , aber eigentlich egal mit was) oeffne die Datei les zeile fuer zeile ein und ersetze immer dann das gesuchte durch das neue dafuer braucht man keinen Tag Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Original erstellt von Hasi: <STRONG>schreib dir ein Program (Java, ne besser C++ , aber eigentlich egal mit was) oeffne die Datei les zeile fuer zeile ein und ersetze immer dann das gesuchte durch das neue dafuer braucht man keinen Tag</STRONG> Ähm ja...kann ich Programmieren? *lol* Zitieren
Hasi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 wie???? zwingt man euch nicht in die BS zu gehen, wir proggen da aber sonst finde ich die Idee von 2-Mod muesste gut das muesste schon klappen oder nicht??? @Poldi: stimmt haette vielleicht ein [Klugscheiss] machen sollen trotzdem danke Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Ich gehe schon in die BS. Da haben wir bisher gerade mal die Grundlagen (Syntax usw.) von C kennengelernt. Jetzt sind wir beim Thema Datenbanken. Die Methode mit dem Suchen/Ersetzen ist zwar die einfachste, aber es dauert bestimmt mindestens 2 Tage bei einer Datei mit dem Umfang. Zitieren
Poldi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 hast du denn ne entwicklungsumgebung? Borland zum Beispiel? Mit Online Hilfe? Dann nix wie los!! Lerning bei ausprobiering ... Zitieren
Hasi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 JBuilder4 kann man sich zum Beispiel Trial kostenlos downloaden Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Original erstellt von Hasi: <STRONG>JBuilder4 kann man sich zum Beispiel Trial kostenlos downloaden </STRONG> Ich schätze einfach mal, bis ich das mit unserer HighSpeed ISDN-Leitung runtergeladen hätte, ist meine Workstation doch mit Notepad schneller. Zitieren
Manne Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Hi OiProll, ich verstehe dein Problem mit der Zeit nicht. :confused: Habe gerade in einer 2,5 MB grossen Tetxdatei das Wörtchen ein (kam ca. 2500 mal vor) durch ein anderes ersetzen lassen und das ging schneller als ein Augenzwinkern. Mein Rat, wie der auch von 2-frozen, probier es einfach aus. Manne :cool: Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Ich habe das Ganze ja laufen im Moment. Eigentlich hatte ich auch nicht erwartet, daß ich mit einem PIII 750 / 256 MB einige Stunden dafür brauche... Zitieren
BunteKuh Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Hi, versuchs mal mit einem vernünftigen Editor (z.B. textpad (www.textpad.com)) mit dem hab ich kürzlich dasselbe auf einige MB HTML-Dateien gemacht,dauerte keine Sekunde. Gruß, BunteKuh Zitieren
Manne Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Hi OiProll, Ich habe das Ganze ja laufen im Moment. Eigentlich hatte ich auch nicht erwartet, daß ich mit einem PIII 750 / 256 MB einige Stunden dafür brauche... :confused: :confused: Sag mal ist dein Rechner vielleicht abgestuerzt oder laesst du das Ganze im Hintergrund laufen und im Vordergrund arbeitest du mit ressourcenhungrigen Programmen? Manne Zitieren
Poldi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 #include <stdio.h> #include <stdlib.h> # define MAXCHARS 1500 // --------------- G L O B A L E V A R I A B L E N -------------------- char InputFile[MAXCHARS]; char OutputFile[MAXCHARS]; char Suchstring[MAXCHARS]; char ReplaceString[MAXCHARS]; // --------------- F U N K T I O N S P R O T O T Y P E N ---------------- void Programmaufruf_pruefen(int argc, char *argv[]); void stringcopy(char *ziel, char *quelle, int Groesse); //************************************************************* // --------- // M A I N // --------- //************************************************************* int main(int argc, char *argv[]) { char Zeile[MAXCHARS]; char puffer1[MAXCHARS]; char puffer2[MAXCHARS]; int position; int laenge; int Zeilenlaenge; int bla; int i; int k; char *loc; FILE *InFile; FILE *OutFile; Programmaufruf_pruefen(argc, argv); InFile = fopen(InputFile, "r"); OutFile = fopen(OutputFile, "w"); laenge = strlen(Suchstring); printf("Filename: %s\n", InputFile); while ((fgets(Zeile,MAXCHARS-1,InFile)) != 0) { while ((loc = strstr(Zeile,Suchstring)) != 0) { //printf ("Zeile a: %s\n", Zeile); puffer1[0]='\0'; puffer2[0]='\0'; Zeilenlaenge = strlen(Zeile); position = loc-Zeile; //printf("Position: %d\n", position); strncpy(puffer1,Zeile,position); puffer1[position] = '\0'; bla = position+laenge; //printf("bla %d\n",bla); k=0; for (i=bla; i<Zeilenlaenge; i++) { puffer2[k] = Zeile[i]; k++; } puffer2[k] = '\0'; //printf("Puffer1: >%s<\n", puffer1); //printf("Puffer2: >%s<\n", puffer2); stringcopy(Zeile,puffer1,MAXCHARS); strcat(Zeile,ReplaceString); strcat(Zeile,puffer2); } // while suchbegriff gefunden printf ("Zeile b: %s\n", Zeile); fprintf(OutFile,"%s",Zeile); } // while fgets ENDE fclose(OutFile); fclose(InFile); } // ende MAIN // =========================================================== // ---- //************************************************************* void Programmaufruf_pruefen(int argc, char *argv[]) { // Variablen: char *paramValue1; char *paramValue2; char *paramValue3; char *paramValue4; // -------------------- //printf("Anzahl Parameter; %d", argc); if (argc == 5) { //printf("Vier Parameter sind da"); // -------------------- if ((paramValue1 = (char*)malloc((strlen(argv[1]) + 1) * sizeof(char)))==NULL) { printf("Speicher konnte nicht reserviert werden!\n"); printf("Programm bricht ab!\n"); exit(55); } paramValue1 = argv[1]; stringcopy(InputFile, paramValue1, MAXCHARS); // -------------------- if ((paramValue2 = (char*)malloc((strlen(argv[2]) + 1) * sizeof(char)))==NULL) { printf("Speicher konnte nicht reserviert werden!\n"); printf("Programm bricht ab!\n"); exit(55); } paramValue2 = argv[2]; stringcopy(Suchstring, paramValue2, MAXCHARS); // -------------------- if ((paramValue3 = (char*)malloc((strlen(argv[3]) + 1) * sizeof(char)))==NULL) { printf("Speicher konnte nicht reserviert werden!\n"); printf("Programm bricht ab!\n"); exit(55); } paramValue3 = argv[3]; stringcopy(ReplaceString, paramValue3, MAXCHARS); // -------------------- if ((paramValue4 = (char*)malloc((strlen(argv[4]) + 1) * sizeof(char)))==NULL) { printf("Speicher konnte nicht reserviert werden!\n"); printf("Programm bricht ab!\n"); exit(55); } paramValue4 = argv[4]; stringcopy(OutputFile, paramValue4, MAXCHARS); // -------------------- } else { printf("Nicht genug Parameter übergeben!"); exit; } } // =========================================================== // ---- //************************************************************* // Funktion: stringcopy // Beschreibung: // diese funktion wurde geschaffen, damit man nicht zu viel text in zu // kleine strings schreiben kann void stringcopy (char *ziel, char *quelle, int Groesse) { if ( (Groesse-strlen(ziel)) > strlen(quelle) ) { strcpy(ziel,quelle); }else{ printf("Stringcopy fehlgeschlagen!\n"); printf("Ziel: >%s<, Quelle: >%s< Groesse: %d\n", ziel, quelle, Groesse); exit(88); } } // ende stringcopy probiers mal damit, mir war langweilig ... Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Der Rechner läuft eigentlich wunderbar. Allerdings laufen im Hintergrund so einige Serverdienste. Laut Task-Manager kriegt Notepad aber 50% der CPU-Zeit. Zitieren
DocMartens Geschrieben 13. Juni 2001 Autor Geschrieben 13. Juni 2001 Danke Poldi! Ich versuch's damit mal. Zitieren
Poldi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 bitte bitte, gern geschehen. Gib mir mal deine Email, dann schick ich dir die Rechnung ... *grins* Zitieren
Poldi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 sag bescheid obs läuft, ist nämlich für unix geschrieben, kann sein daß ne bibliothek fehlt oder so Zitieren
Wasi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Meiner ist kürzer -- langsamer und schlechter lesbar, aber was soll's: #!/usr/bin/perl ##Anzahl der Argumente testen## ($#ARGV < 3)?(print ("Ungültige Anzahl von Argumenten\n\nSyntax:\n ersetze <Eingabedatei> <Ausgabedatei> <Suchzeichenfolge> <Ersetzzeichenfolge>\n\n"), exit(1)) $INFILE=$ARGV[0], $OUTFILE=$ARGV[1], $SSTRING=$ARGV[2], $RSTRING=$ARGV[3], $COUNTER=0); ##Testen, ob infile existiert und lesbar ist, wenn ja öffnen, wenn nein abbreche n## (! -r $INFILE)?(print("Eingabedatei '$INFILE' existiert nicht, oder ist nicht lesbar.\nBreche ab...\n\n"), exit(3)) :open INFILE, $INFILE; ##Testen, ob bereits ein file namens outfile existiert, wenn ja, infile schließen und abbrechen## (-e $OUTFILE)?(print("Ausgabedatei '$OUTFILE' existiert bereits.\nBreche ab...\n\n"), close (INFILE), exit(2)) :open OUTFILE, ">".$OUTFILE; ##einlesen und ersetzen## while (<INFILE> ) { $COUNTER+=($_=~s/$SSTRING/$RSTRING/g); print OUTFILE $_; } ##files schließen## close INFILE && close OUTFILE; ##;o)## print ("$COUNTER Ersetzungen gesamt.\n\n"); [/code] ZäR Wasi Zitieren
Wasi Geschrieben 13. Juni 2001 Geschrieben 13. Juni 2001 Unfähig einen Button zu deaktivieren, Sch**ß Smilies ARRGHHHHHHHHH! #!/usr/bin/perl ##Anzahl der Argumente testen## ($#ARGV < 3)?(print ("Ungültige Anzahl von Argumenten\n\nSyntax:\n ersetze <Eingabedatei> <Ausgabedatei> <Suchzeichenfolge> <Ersetzzeichenfolge>\n\n"), exit(1))$INFILE=$ARGV[0], $OUTFILE=$ARGV[1], $SSTRING=$ARGV[2], $RSTRING=$ARGV[3], $COUNTER=0); ##Testen, ob infile existiert und lesbar ist, wenn ja öffnen, wenn nein abbrechen## (! -r $INFILE)?(print("Eingabedatei '$INFILE' existiert nicht, oder ist nicht lesbar.\nBreche ab...\n\n"), exit(3)):open INFILE, $INFILE; ##Testen, ob bereits ein file namens outfile existiert, wenn ja, infile schließen und abbrechen## (-e $OUTFILE)?(print("Ausgabedatei '$OUTFILE' existiert bereits.\nBreche ab...\n\n"), close (INFILE), exit(2)):open OUTFILE, ">".$OUTFILE; ##einlesen und ersetzen## while (<INFILE>) { $COUNTER+=($_=~s/$SSTRING/$RSTRING/g); print OUTFILE $_; } ##files schließen## close INFILE && close OUTFILE; ##;o)## print ("$COUNTER Ersetzungen gesamt.\n\n"); [/code] ZäR Wasi Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.