Speichern in Datei ohne Überschreiben...



  • Hm ich habe jetzt die ganze zeit rumprobiert mit while schleifen habe ich nie gearbeitet.

    Ich weis das er bei

    int zahl =0;
    zahl = zahl +1;
    

    das nur einmalig macht und da der Fehler liegt, wenn er öfters 1 hinzufügen würde dann geht es, nur bei:

    while (zahl = zahl +1);
    

    geht er in einer undendlichkeits schleife rein also ist das nicht richtig.

    Desweiteren frage ich mich falls es so ähnlich gehen würde! würde er sich an den richtigen int wert erinnern wenn man ein programm neustart macht !? denn es muss doch gespeichert werden oder !?

    Kann mir noch jemand bitte ein tip geben oder helfen 😞

    Liebe Grüße
    Malcolm



  • Hi,

    ne weil funktioniert ja auch anders nämlich so:

    int counter = 20; //Anzahl deiner Memos
      	int zahl = 0;     //einen Zähler für die Durchläufe
    
      	while(zahl < 20)	//laufe solange 'zahl' kleiner '20' ist
      	{
    		//hierdrin müssen dann deine Memoboxen laufen
    		list->SaveToFile(ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + zahl + ".dls" );
    
    		zahl++;	//Zähler um 1 erhöhren
    
      	}
    

    vielleicht kannste damit ja was anfagen
    bye



  • Hi,

    ICH MEINE:
    ne 'while' funktioniert ja auch anders nämlich so:

    int anzahl = 20; //Anzahl deiner Memos
      	int zahl = 0;     //einen Zähler für die Durchläufe
    
      	while(zahl < anzahl)	//laufe solange 'zahl' kleiner 'anzahl' ist
      	{
    		//hierdrin müssen dann deine Memoboxen laufen
    		list->SaveToFile(ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + zahl + ".dls" );
    
    		zahl++;	//Zähler um 1 erhöhren
    
      	}
    

    vielleicht kannste damit ja was anfagen
    bye



  • Hallo Malcolm15,

    dein Fehler ist außerdem noch, daß du bei "FileExists()" auch den kompletten Pfadnamen abfragen mußt, d.h.

    AnsiString filepath;
    filepath = ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + ".dls";
    
    if(FileExists(filepath))
    {
        int counter = 2;
        while(filepath = ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + counter + ".dls", FileExists(filepath))
            counter++;
    }
    
    list->SaveToFile(filepath);
    


  • Hoi

    also ich habe mein Code jetzt ganz gut hinbekommen dank eure hilfe, ich habe aber dennoch ein kleinen Fehler...

    Könnt ihr mir sagen was ich in meinem Code Falsch habe !?

    Falls ein Bild nicht vorhanden ist soll er Image2 zeigen was unsichtbar war,
    macht er auch nur er lädt dann die Datei nicht mehr in den Feldern ein.

    Also steht in den Feldern die daten von einer anderen Datei...

    (hoffe ich versteht was ich meine).

    void __fastcall TForm6::onclick(TObject *Sender)
    {
    
    Image2->Visible=false;
    Edit1->Text =  ListBox1->Items->Strings[ListBox1->ItemIndex];
    
    AnsiString zFile;
    
    Graphics::TBitmap *bmp  = new Graphics::TBitmap();
    
    zFile="Bilder\\" + Edit1->Text + ".bmp";
    if(FileExists(zFile)==false){
    Image2->Visible=true;
    //ShowMessage("File nicht gefunden!?\r\r=> "+zFile);
    delete bmp;
    return;
    }
    bmp->LoadFromFile(zFile);
    
    Image1->Picture->Bitmap=bmp;
    
    delete bmp;
    
    Integer iInd; AnsiString zTxt;
    
    iInd=ListBox1->ItemIndex;
    if(iInd==-1){
    //ShowMessage("Keine Auswahl");
    return;
    }
    zTxt=ListBox1->Items->Strings[iInd];
    
    zFile="Bilder\\" + Edit1->Text + ".bmp";
    //ShowMessage("Fileauswahl: "+zFile);
    
    TStringList* textlist = new TStringList();
    textlist->LoadFromFile("Texte\\" + Edit1->Text + ".dls");
    Edit2->Text= textlist->Strings[61];
    Edit3->Text= textlist->Strings[62];
    Edit4->Text= textlist->Strings[63];
    Edit5->Text= textlist->Strings[64];
    Edit6->Text= textlist->Strings[65];
    Edit7->Text= textlist->Strings[66];
    Edit8->Text= textlist->Strings[67];
    Edit9->Text= textlist->Strings[68];
    Edit10->Text= textlist->Strings[69];
    Edit11->Text= textlist->Strings[70];
    Edit12->Text= textlist->Strings[71];
    Edit13->Text= textlist->Strings[72];
    
    Memo1->Text= textlist->Strings[73];
    
    Edit14->Text= textlist->Strings[2];
    Edit15->Text= textlist->Strings[3];
    Edit16->Text= textlist->Strings[1];
    Edit17->Text= textlist->Strings[5];
    Edit18->Text= textlist->Strings[6];
    Edit19->Text= textlist->Strings[4];
    Edit20->Text= textlist->Strings[8];
    Edit21->Text= textlist->Strings[9];
    Edit22->Text= textlist->Strings[7];
    Edit23->Text= textlist->Strings[11];
    Edit24->Text= textlist->Strings[12];
    Edit25->Text= textlist->Strings[10];
    Edit26->Text= textlist->Strings[14];
    Edit27->Text= textlist->Strings[15];
    Edit28->Text= textlist->Strings[13];
    Edit29->Text= textlist->Strings[17];
    Edit30->Text= textlist->Strings[18];
    Edit31->Text= textlist->Strings[16];
    Edit32->Text= textlist->Strings[20];
    Edit33->Text= textlist->Strings[21];
    Edit34->Text= textlist->Strings[19];
    Edit35->Text= textlist->Strings[23];
    Edit36->Text= textlist->Strings[24];
    Edit37->Text= textlist->Strings[22];
    Edit38->Text= textlist->Strings[26];
    Edit39->Text= textlist->Strings[27];
    Edit40->Text= textlist->Strings[25];
    Edit41->Text= textlist->Strings[29];
    Edit42->Text= textlist->Strings[30];
    Edit43->Text= textlist->Strings[28];
    Edit44->Text= textlist->Strings[32];
    Edit45->Text= textlist->Strings[33];
    Edit46->Text= textlist->Strings[31];
    Edit47->Text= textlist->Strings[35];
    Edit48->Text= textlist->Strings[36];
    Edit49->Text= textlist->Strings[34];
    Edit50->Text= textlist->Strings[38];
    Edit51->Text= textlist->Strings[39];
    Edit52->Text= textlist->Strings[37];
    Edit53->Text= textlist->Strings[41];
    Edit54->Text= textlist->Strings[42];
    Edit55->Text= textlist->Strings[40];
    Edit56->Text= textlist->Strings[44];
    Edit57->Text= textlist->Strings[45];
    Edit58->Text= textlist->Strings[43];
    Edit59->Text= textlist->Strings[47];
    Edit60->Text= textlist->Strings[48];
    Edit61->Text= textlist->Strings[46];
    Edit62->Text= textlist->Strings[50];
    Edit63->Text= textlist->Strings[51];
    Edit64->Text= textlist->Strings[49];
    Edit65->Text= textlist->Strings[53];
    Edit66->Text= textlist->Strings[54];
    Edit67->Text= textlist->Strings[52];
    Edit68->Text= textlist->Strings[56];
    Edit69->Text= textlist->Strings[57];
    Edit70->Text= textlist->Strings[55];
    Edit71->Text= textlist->Strings[59];
    Edit72->Text= textlist->Strings[60];
    Edit73->Text= textlist->Strings[58];
    
    }
    //---------------------------------------------------------------------------
    


  • Hallo
    Sag mal, hast Du die ganzen Edit-Felder zur Entwurfszeit erstellt?
    Dann wirds aber Zeit, sich mal ein Tutorial über "dynamisch erzeugte Objekte"
    und deren Event-Auswertung anzusehen.
    Habe gerade keinen passenden Link zur Hand.
    Google ist dein Freund.
    wNw



  • Hallo

    Das dynamische Erzeugen von Controls und deren Verwendung als Array in einer Schleife wird zum Beispiel in der FAQ hier im Forum beschrieben.

    bis bald
    akari



  • Malcolm15 schrieb:

    Hoi

    .. ich habe aber dennoch ein kleinen Fehler...
    ...Also steht in den Feldern die daten von einer anderen Datei...

    Hi,
    Um deine Frage zu beantworten:
    Leere einfach die TEdits mit EditX->Text = ""; zu Beginn des ClickEvent.

    Was mir weiter auffällt:

    zFile="Bilder\\" + Edit1->Text + ".bmp";
    

    ist zweimal definiert.

    Diese Codezeilen sollten ganz nach oben, um sofort auszusteigen:

    iInd=ListBox1->ItemIndex;
       if(iInd==-1){
          //ShowMessage("Keine Auswahl");
          return;
       }
    

    Zum Erstellen der TEdits teile ich die Meinung von wNw und akari.

    mfg
    kpeter



  • Huhu

    Also danke euch für die Hilfe und die Tipps ich werde diesbezüglich nochmal nächste woche schauen..

    Ich habe jetzt folgendes gemacht:

    Ich habe kpeter s vorschläge umgesetzt indem ich EditX->Text=""; gemacht habe ..

    Das Programm löscht die Inhalte und ich habe kein Fremd Text mehr super..

    zFile="Bilder\\" + Edit1->Text + ".bmp";
    

    das war doppelt und wurde einmal auskommentiert...

    iInd=ListBox1->ItemIndex;
       if(iInd==-1){
          //ShowMessage("Keine Auswahl");
          return;
       }
    

    wurde ganz am anfang des click events gesetzt...

    Das Problem besteht weiterhin sobald er kein eigenes Foto lädt sondern das Image2 sichtbar macht lädt er die textdatei nicht mehr ein obwohl diese vorhanden ist :(.

    was ist denn da noch falsch ?

    LG
    Malcolm



  • Malcolm15 schrieb:

    Das Problem besteht weiterhin sobald er kein eigenes Foto lädt sondern das Image2 sichtbar macht lädt er die textdatei nicht mehr ein obwohl diese vorhanden ist ...

    Hi,

    weil du, wenn die Bild-Datei nicht vorhanden ist, die Funktion mit return verlässt und damit nix weiter passiert.
    Du müsstest also in etwa so schreiben:

    if(FileExists(zFile)==false){ 
          Image2->Visible=true;
          // ShowMessage("File nicht gefunden!?\r\r=> "+zFile);
          // delete bmp; // darf dann hier nicht mehr stehen
          // return;     // hier kommentieren
       }
       else {
          bmp->LoadFromFile(zFile);
          Image1->Picture->Bitmap=bmp;
       }
       delete bmp;
    

    mfg
    kpeter



  • vielleicht solltest du aus Zeile 18 mal das return rausnehmen, da du damit die gesamte Funktion verläßt... 😃

    [Edit] etwas zu langsam 😉



  • Superrr genau ja es funktioniert jetzt 🙂

    Hab eine Letzte frage damit diese Form Fertig ist :S.

    Es kann ja sein das es eine Zeile nicht gibt, ich weise aber diese Zeile zu und es kommt zu einem Fehler was logisch ist.(Da nicht vorhanden)

    z.B.

    Edit2->Text= textlist->Strings[61];
    

    gibt es aber keine Zeile 61 kommt der Fehler, nun muss ich also abfragen ob es
    diese Zeile gibt, wenn ja soll er sie in Edit2 schreiben, wenn nicht soll er nix tun.

    ich dachte auf der shcnelle an sowas

    if (textlist->Strings[73]>0){
    Memo1->Text= textlist->Strings[73]; }
    else{
    }
    

    Nur hier soll das Programm in der Zeile 74 gehen und schauen ob der größer als
    0 ist, was er nicht kann wenn die Zeile nicht vorhanden ist.

    Meine Frage welche funktion soll ich nehmen habt ihr ein tipp ? 😕

    Danke für eure Geduld und das Helfen.

    Liebe Grüße
    Malcolm



  • eigentlich wärs besser du würdest die StringList in einer Schleife von 0 bis Count durchgehen und dabei deine dynamsichen Komponenten befüllen, dann passiert der Überlauf garnicht erst

    alternativ:

    try
      {
      Memo1->Text= textlist->Strings[73]; 
      }
    catch (...)
      {
      }
    


  • Hallo

    Danke für die Info ich versuche schon die ganze zeit (da ich ganz neu anfange mit BCB) es hin zubekommen was ich geschafft habe ist das:

    TStringList *liste=new TStringList();
     liste->LoadFromFile("Texte\\test.dls");
    
     int Anzahl=liste->Count;
    
      for (int i = 0; i < Anzahl; i++)
      {
    
      }
    

    Also ich Lade die datei in liste ich zähle wieviele zeilen die liste hat.

    Jetzt muss ich abfragen existiert zeile 1 ? wenn ja kopier es in edit1..
    und das mit allen zeilen...

    Da ich neu bin hab ich in mom. keine ahnung wie ich den nächsten schritt mache kannst du mir noch ein tipp geben damit ich weiter komme ?

    Liebe Grüße
    Malcolm



  • Hi,

    einfach vorher ermitteln, ob in textlist der jeweilige String Zeichen enthält.

    .
    if (textlist->Strings[62] != "" ) Edit3->Text= textlist->Strings[62];
    .
    if (textlist->Strings[73] != "" ) Memo1->Text= textlist->Strings[73];
    .
    

    mfg
    kpeter



  • @kpeter
    wenn die Zeile garnicht vorhanden ist, kommt bei der Abfrage ob sie leer ist eine Exception, siehe den Beitrag nach meinem ersten Post

    @Malcolm
    das mit der Schleife geht natürlich nur wenn du die Edits dynamisch erzeugst oder in einem Arry verwaltest, z.B.:

    TEdit *EditArray[] = {Edit1, Edit2, Edit3, Edit4 /*usw*/}; //in der Reihenfolge in der du befüllen willst
    int Anzahl=liste->Count;
    for (int i = 0; i < Anzahl; i++)
      {
      EditArray[i]->Text = liste->Strings[i];
      }
    

    Hier mußt du jetzt nur noch darauf achten, dass nicht weniger Edits als Textzeilen vorhanden sind

    zum dynamischen Erzeugen von Komponenten und Arrays von Komponenten gibt es einige Beiträge in den FAQ


Anmelden zum Antworten