Problem :(



  • hey leute

    ich habe eine textdatei die ich einlesen möchte. sieht etwa so aus:
    193577-50000 0242708009 000773191422 000773191422
    193577-50000 0242707932 0007731913F6 0007731913F6

    eigentlich hat es noch zwei weitere Zahlen blöcke, aber die sind nicht so wichtig.

    ich sollte jetzt einfach, immer die letzte Zahl im letzten Zahlenblock um 1(+1) erhöhen. und dann wieder in eine neue Datei speichern, aber die alte darf nich überschrieben werden.
    die zahlenblöcke sind durch einen Tab im .txt file getrennt.

    mein Problem ist, ich habe keine ahnung wie ich aus der textdatei genau den letzten zahlblock bearbeiten kann usw. könnte mir bitte ein kleines programm schreiben oder mir gute tipps dafür geben wie ich das lösen kann.

    thx im voraus.¨

    mfg roger



  • Wenn die immer gleich lang sind, sollte das ja kein Problem sein. Hast du schon einen Lösungsansatz. Wenn ja poste den mal bitte.
    Wenn die immer gleich lang ist, liest du die letzte Zahl aus, erhöhst sie um 1 und schreibst sie in ein neues File weg, dabei wird ja im alten File nichts verändert, sondern nur die ausgelesene Zahl, die ja gepspeichert wird von dir in einer Variablen.

    Code-Hacker



  • //Includes
    #include <stdio.h>
    #include <formatio.h> 
    
    void main(void)
    {
    static int dat;
    
    	dat = OpenFile ("c:\\WINNT\\Profiles\\ebader\\Desktop\\ordner\\plc_ia_config.txt", VAL_READ_WRITE, VAL_OPEN_AS_IS, VAL_ASCII);	
    
    	if (dat==NULL)
     	{
     		 printf("Kann plc_ia_config.txt nicht öffnen\n");
     	}
    
     	return;
    
    }
    

    ist bis jetzt sehr wenig, bin noch anfänger im programmieren, muss das aber irgendwie lösen. ist wichtig.

    mfg roger



  • Guck mal hier rein:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39351&highlight=file

    Kann mich gerade nicht in C File-Handling einarbeiten, weil ich keine Zeit habe. Die Lösung für C++ könnte ich dir schicken, aber für C muss ich mich einarbeiten.

    Code-Hacker



  • das wäre nett wenn du mir die lösung in c++ schicken könntest, oder besser einfaach hier posten.
    thx

    mfg roger



  • Hier eine bewährte C-Lösung

    FILE *InFile;    
    char line[128+1];// das +1 ist eine Marotte von mir um den üblichen Fehler zu      
                     // vermeiden das für die schließende Null kein Platz mehr da ist.        
    
    if (0==(InFile=fopen("c:\\WINNT\\Profiles\\ebader\\Desktop\\ordner\\plc_ia_config.txt","r")) 
        {printf("Kann plc_ia_config.txt nicht öffnen\n"); 
    }    
    while (NULL!=fgets(line,128,InFile))   // lese Datei bis zum Ende  
     {    
        // tu was du jetzt tun willst siehe Code-Hacker 
     };    
    fclose(InFile);
    


  • Und das ganze in C++ würde dann so aussehen:

    #iostream <fstream>
    
    ...
    
    void auslesen();
    {
      char zeile[251];
    
      ifstream lesen("c:\\WINNT\\Profiles\\ebader\\Desktop\\ordner\\plc_ia_config.txt", ios_base::in);
      if(lesen.good())
        while(!lesen.eof())
        {
          // zahl auslesen, in variable speichern, um 1 erhöhen und...
          // ...wegschreiben:
          ofstream speichern("c:\\WINNT\\Profiles\\ebader\\Desktop\\ordner\\plc_ia_config.txt", ios_base::out | ios_base::app); // app hängt ausgabe an Datei
          save << endl /* Zeilenumbruch */ << neue_Zahl;
        };
      else
        cout << "Kann plc_ia_config.txt nicht öffnen." << endl;
    }
    

    Hier noch wie du eine 250 Zeichenlange zeile einer Datei ausliest:

    char zeile[251];
    ifstream lesen("c:\\WINNT\\Profiles\\ebader\\Desktop\\ordner\\plc_ia_config.txt", ios_base::in);
    lesen.getline(zeile,250);
    

    Wie du die Zahl die du haben willst rausbekommst kriegst du denke ich alleine hin 😉

    Code-Hacker



  • @ Code-hacker Sieht nicht wesentlich anders aus als die Lösung in C 😃



  • Jepp, hätte ich mir auch sparen können, ich weiß... 🙄
    Habe sie nur geschickt, für den Fall das noch Interesse besteht. 🙂

    Code-Hacker



  • War ja gut so, roger hatte ja danach gefragt.

    Fands nur toll das beide Lösungen so dicht beieinander liegen


Anmelden zum Antworten