.txt File an bestimmter Stelle bearbeiten



  • Hallo allerseits,

    ich bräuchte mal wieder eure Hilfe. Und zwar möchte ich
    einen vom Benutzer eingegebenen Zahlenwert an einer
    bestimmt Stelle in einer .txt File speichern.
    Wie geht das?

    Ich habe schon eine Funktion zum einlesen/laden von Werten die funktioniert.

    fopen(FilNam,"r+") //oeffnet mir die Datei
    while ((x=fgetc(y))!=EOF) //liest File ein
    fscanf //"scannt" die Datei nach Schlagwörtern
    //nach diesem Schlagwort kommt die Zahl
    //die eingelesen wird
    fscanf //ließt dann den gewünschten Wert ein
    fclose //schließt Datei

    Soweit paßt ja alles.

    Aber ich möchte ja nichts laden sondern speichern.
    Ich wäre dann so vorgegangen das ich die Funktion einfach so lasse
    und nur fprintf mit fscanf vertausche. Ich hab gedacht das ich dann
    genau an die Stelle meinen gewünschten Wert schreiben kann. Leider
    funktioniert das nicht. Die .txt File wird bearbeitet aber ist dann
    komplett leer. Ich verstehe ja nichtmal warum das so ist.
    Hat da jemand ne Idee bzw. einen Lösungsvorschlag? Wäre sehr cool.

    Danke

    casccoin 🤡

    [code]
    //******************************************************************************
    int Read_Koord(char* FilNam, Koordinaten_PYN* R,char* Schlagwort)
    {
    FILE *d = fopen(FilNam,"r");
    
    int c;
    char Key[100];
    while((c=fgetc(d))!=EOF)
      {
      if(c!=':') continue;
      fscanf(d,"%s",Key);
      if(stricmp(Key,Schlagwort)==0) fscanf(d,"%s",R->Name);
      }
    fclose(d);
    return(0);
    }
    //******************************************************************************
    


  • Hallo,
    öffne die Datei mit "r+", das öffnet zum Lesen und Schreiben.
    http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
    Zum Schreiben kannst du fprintf benutzen.



  • genau so hab ich mir das überlegt.....auch mit dem fprintf...
    aber es geht nicht.....
    leider sehe ich den fehler nicht.

    weiß jemand worans liegt?

    int Write_Koord(char* FilNam, char* Schlagwort)
    {
    FILE *d = fopen(FilNam,"r+");
    
    int c;
    char Key[100];
    while((c=fgetc(d))!=EOF)
      {
      if(c!=':') continue;
      fscanf(d,"%s",Key);
      if(stricmp(Key,Schlagwort)==0)
        {
        int i=999;
        fprintf(d,"%d",i);
        }
      }
    fclose(d);
    return(0);
    

    bin um jede hilfe dankbar.

    lg cascoin



  • Was sagt denn dein Compiler dazu?
    Er sollte sowas wie "Error line 11: Unknown ID stricmp" sagen, wodurch du relativ schnell merkst dass du dich vertippt hast und stricmp ohne i geschrieben wird.



  • stricmp ist das gleiche wie strcmp, nur dass es nicht case-sensitive ist.

    Gruß



  • Hallo zusammen,

    ja ich glaube auch nicht das es daran liegt. Wie gesagt, die Funktion mit der ich die Werte lade funktioniert ja. Ich kann wunderbar alle Werte laden.

    Nur das ich halt leider auch mit einer anderen Funktion speichern moechte.

    Prinzipiell sieht nichts nach einem Fehler aus, der Compiler spuckts nichts aus. Nur funktionieren tuts nicht. Nichts passiert.

    Weiss jemand woran das liegt bzw. ob man mit einem anderen Befehl als

    fprintf(d,"%d",i);
    

    das ganze loesen koennte?

    Ich checks nicht.......

    lg cascoin



  • oder vielleicht ftell und fseek?



  • Es gibt da noch fwrite und so, aber eigentlich sollte fprintf schon das richtige tun.

    Musst du halt debuggen. Schreibe ein Miniprogramm was eine Datei öffnet und dort mit fprintf was hineinschreibt. Wenn das nicht klappt hier posten. Wenn es klappt das ganze in eine Funktion schreiben und in dein Programm kopieren.



  • Hallo,

    wie ihr seht ist das mein ganzes Programm. Es ist wirklich nur ein Button auf der Oberflaeche. Wenn man den anklickt sollte es funktionieren.
    Tut es aber nicht. Ich verstehe es nicht. Sonst kann ich schon in Dateien reinschreiben aber ich moechte es ja gezielt tun..... Wie man debuggt weiss ich ehrlich gesagt nicht. Hab da rumgedrueckt aber ist nicht gross was passiert.
    Deswegen konnte ich damit irgendwie nix anfangen.

    Hat jemand ne Idee????

    Danke Cascoin

    //---------------------------------------------------------------------------
    #include <conio.h>
    
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <stdio.h>
    #include <string.h>
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    FILE *d = fopen("Koordinaten.txt","r+");
    
    int c;
    char Key[1000];
    while((c=fgetc(d))!=EOF)
      {
      if(c!=':') continue;
      fscanf(d,"%s",Key);
      if(stricmp(Key,"aa")==0)
        {  fprintf(d,"%d",123);   }
      }
    fclose(d);
    }
    //---------------------------------------------------------------------------
    


  • gibts doch net das ddas hier keiner weiß......

    ich weiss echt nicht worans liegt weil ich mit dem debugger nicht umgehen kann.
    also, wenns jemand weiß wie es richtig geht bzw. was falsch ist wärs ziemlich cool.

    meine .txt-File sieht übrigens so aus:

    : aa
    : bb
    : cc
    : dd
    : ee
    : ff
    : gg
    

    danke :xmas2:



  • casicas13 schrieb:

    gibts doch net das ddas hier keiner weiß......

    ich weiss das!
    fseek und ftell benutzen 💡


Anmelden zum Antworten