Ein Zeichen von datei->Strings[zeile]



  • Hallo,
    wie stelle ich das an das aus einer Datei ein bestimmtes Zeichen aus einer bestimmten Zeile. Ich wusste das mal aber leider hab ich lange nichts mehr mit C++ zu tun gehabt und vieles einfache vergessen ^^

    Also die Zeile und die Stelle des Zeichens sind in jeweils einer Variable gespeichert.

    Danke schon mal im voraus



  • int zeilenzahl = 1; //Zeile in der Datei
    int pos = 3; //das dritte Zeichen
    
    TStringList *datei = new TStringList();
    datei->LoadFromFile("datei.txt"); //Auslesen
    String zeile = datei->Strins[zeilenzahl];
    
    char zeichen = zeile.SubString(pos, 1);
    //oder
    char zeichen = zeile[pos];
    

    mfg
    Rai



  • Hmm...naja also wie kann ich es hier drin umsetzen? Ich hab noch weniger plan als ich dachte 😣

    {
    OpenDialog1->Execute();
    textdatei->LoadFromFile(OpenDialog1->FileName);
    codedatei->LoadFromFile("dd62.dat");
    for(int zeilen=0; zeilen < textdatei->Count; zeilen++)
     {
     for(int zeichen=0; zeichen < textdatei->Strings[zeilen].Length(); zeichen++)
      {
      for(int ezeilen=0; ezeilen < codedatei->Count; ezeilen++)
       {
       for(int ezeichen=0; ezeichen < codedatei->Strings[ezeichen].Length(); ezeichen++)
        {
        //Ersetzen
        }
       }
      }
     }
    }
    


  • Sehe ich das richtig, dass du jede Zeile mir einer anderen ersetzen willst?
    Wen ja:

    OpenDialog1->Execute();
    textdatei->LoadFromFile(OpenDialog1->FileName);
    codedatei->LoadFromFile("dd62.dat");
    for(int zeilen=0; zeilen < textdatei->Count; zeilen++)
    {
    textdadtei->Strings[zeilen] = codedatei->Strings[zeilen];
    
    }
    

    Allerdings sehe ich den Sinn einer solchen Aktion nicht..

    mfg

    Rai



  • Hallo,
    Ja schon richtig aber auch jedes einzelne Zeichen einer Zeile.
    Bei jedem Zeichen soll in der anderen Datei nachguckt werden welche Zeichenfolge diesem einen Zeichen entspricht. Das ist kein Problem für mich nur eben das ich nicht weiß wie ich aus einer Zeile ein Zeichen raussuche.
    -Loka



  • textdadtei->Strings[zeilen][zeichen]
    aber immer schön nachschauen ob diese Positionen auch existieren.
    Was genau hast du eigentlich vor?



  • eventuell hilft dir ja StringReplace, vorallem wenn du immer die gleichen Zeichen durch dassselbe Zeichen ersetzen willst



  • Braunstein schrieb:

    textdadtei->Strings[zeilen][zeichen]
    aber immer schön nachschauen ob diese Positionen auch existieren.
    Was genau hast du eigentlich vor?

    Danke...naja das Programm soll einen Text in eigenen Code verschlüsseln
    Ich brauch es nicht aber da is irgendwie so ein Wettbewerb unter Freunden zustande gekommen jeder soll so etwas machen so gut und umfangreich wie möglich. ^^

    Linnea schrieb:

    eventuell hilft dir ja StringReplace, vorallem wenn du immer die gleichen Zeichen durch dassselbe Zeichen ersetzen willst

    Es wird ja nicht immer das selbe Zeichen in der selben Zeile ersetzt sondern
    Jedes einzelne Zeichen jeder Zeile, dafür auch die for-Schleifen



  • Hmm..also muss es doch so funktionieren oder?

    datei->LoadFromFile("abc.txt");
    datei->Strings[3][3] = "x";
    datei->SaveToFile("abc.txt");
    

    Aber es kommt die Fehlermeldung das die Konvertierung von char* nach char nicht möglich sei. Was hab ich falsch gemacht?



  • Du mußt ein Zeichen zuweisen, keinen String

    datei->Strings[3][3] = 'x';
    


  • Ok hab ich gemacht aber die Datei wurde nicht verändert
    also Strings[3][3] ist geblieben wie es vorher war.



  • Hallo,

    Ich arbeite gerade an einem ähnlichen Projektteil...

    Mein Codierung und Decodierung klappt eigentlich soweit.
    Mein Problem ist, da durch die Codierung schöne Sonderzeichen etc. im Zeichensatz entstehen und ich diese anschließend mit SaveToFile abspeicherere, anscheinend manche Zeichen nicht richtig übernommen werden?
    Jedenfalls habe ich beim einlesen/decodieren einige Fehler im Text.

    Kann man dies irgednwie verhindern?
    Ich arbeite mit einer StringList, temporären AnsiStrings und zur Anzeige/Editierung nutze ich ein Memo.
    Kann man irgendwie einen festen Zeichensatz einstellen?

    Gruß und Dank

    Christian



  • @ Loka:

    Eigentlich sollte es so gehen.
    Hast du mal überprüft ob das abspeichern wirklich funktioniert?
    probier vielleicht mal...

    StringList->SaveToFile(ExtractFilePath(ParamStr(0)) + "test.txt");

    ...aus

    genau so beim laden



  • Hallo,

    Ich habe mein Problem gerade einmal analysiert.
    Wie vermutet hängt es damit zusammen, dass ich durch meine Manipulationen Steuerzeichen im Text erzeuge die meinen Algo negativ beeinflussen.

    Ich könnte mir da vielleicht eine Methode schreiben die das mühselig überprüft (zB. nur "normale" Zeichen zulassen oder so)...

    Gibt es nicht eine einfachere Lösung?



  • Geht auch nicht 😞

    Versucht hab ich es auch so:

    OpenDialog1->Execute();
    datei->LoadFromFile(OpenDialog1->FileName);
    datei->Strings[3][3] = 'x';
    datei->SaveToFile(OpenDialog1->FileName);
    

    aber geht genau so wenig



  • Mh, das sollte eigentlich soweit funktionieren

    Läuft es denn ohne Fehlermeldung?

    Gruß Christian



  • Hm...wie geht das? xD



  • Hi,

    hier mal ein kleines Beispiel:

    AnsiString Test = "Test";
    
    AnsiString Filename = ExtractFilePath(ParamStr(0)) + "test.txt";
    
    for(int i = 0; i < 256; i++)
     {
      Test[2]=StrToInt(i);
      Memo1->Lines->Add(Test);
    
     }
    
    Memo1->Lines->SaveToFile(Filename);
    

    Das solltest du zB. bei einem Button-Click ausführen lassen. Du brauchst zur Ausgabe ein Memo1 (kannst es natürlich auch in eine Stringlist packen).

    Gruß Christian



  • Bevor ich die antwort gesehen hab hab ich mich entschieden das fallen zu lassen und es ganz anders zu machen ^^

    textdatei->Text = Memo1->Text;
    codedatei->LoadFromFile("dd62.dat");
    for(int gecodedlines=0; gecodedlines < textdatei->Count+5; gecodedlines++)
     {
     Application->ProcessMessages();
     gecoded->Add("");
     }
    for(int zeilen=0; zeilen < textdatei->Count; zeilen++)
     {
     for(int zeichen=0; zeichen < textdatei->Strings[zeilen].Length(); zeichen++)
      {
      for(int ezeilen=0; ezeilen < codedatei->Count; ezeilen++)
       {
       if(textdatei->Strings[zeilen].SubString(zeichen,1) == codedatei->Strings[ezeilen].SubString(1,1))
        {
        gecoded->Strings[zeilen] = gecoded->Strings[zeilen]+codedatei->Strings[ezeilen].SubString(5,12);
        }
       }
      }
     }
    Memo1->Text = gecoded->Text;
    


  • Warum nehmt ihr nicht eineeinen TMemoryStream oder einen TFileStream um die manipulierten Daten zu verwalten? Da sind Steuerzeichen dann herzlich egal.


Log in to reply