Zum Inhalt springen

Editieren einer 20MB Datei


DocMartens

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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*

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

 


#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 ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...