textfile editieren



  • hallo zum zweiten

    ich möchte in einem Textfile ein bestimmtes wort suchen (mit strstr) und danach an dieser Stelle eine Zahl einfügen. wie ist das realisierbar?
    oder ist es nur möglich Werte oder Strings am Fileende anzugängen?!

    bsp:
    Textfile vor Editierung:

    //===============\n
    // blabla
    //=================
    #include <stdio.h>
    
    #define SIZE
    #define LENGTH 10
    //================
    

    Textfile nach Editierung:

    //===============\n
    // blabla
    //=================
    #include <stdio.h>
    
    #define SIZE 20
    #define LENGTH 10
    //================
    

    gruss



  • Ganze Datei einlesen; Position suchen, die verändert werden soll (z.b. mit strstr); ändern und ganzen Text wieder in die Datei schreiben.



  • marsellus schrieb:

    oder ist es nur möglich Werte oder Strings am Fileende anzugängen?!

    Wenn der zu suchende Text die gleiche Länge hat wie der ersetzende Text, kannst du auch innerhalb der Datei ersetzen. Kommt natürlich recht selten vor. Andernfalls überschreibst du existierende Daten.



  • wie kann ich den ganzen Text in eine Variable speichern?
    Der text ist ja mit "\n" (new line) versehen und deshalb wird ja nur jeweils bis zu dieser stelle eingelesen (mit fgets).
    wie kann ich also den gesamten text speichern, respektive von der gewünschten position an, bis zum fileende?



  • fread wäre eine Möglichkeit (allerdings solltest du vorher genügend Platz bereitstellen).



  • Musst Du das unbedingt in C selbst programmieren? Ansonsten sind evtl. sed, awk oder patch Alternativen.



  • FILE *pFile = fopen( "filename", "rb" );
    
    if ( pFile )
    {
      long lLen = 0;
      char *pData = NULL;
    
      // Dateigröße auslesen
      fseek( pFile, 0, SEEK_END );
      lLen = ftell( pFile );
      fseek( pFile, 0, SEEK_SET );
    
      // Genug Speicher reservieren
      pData = malloc( lLen );
    
      if ( pData )
      {
        // Komplette Datei einlesen
        fread( pData, lLen, 1, pFile );
      };
    
      fclose( pFile );
    };
    

Anmelden zum Antworten