Textzeile vergleichen



  • Hallo
    ich möchte while loopen bis eine Linie vom mehrzeiligen *.txt mit dem
    einzeiligen txt übereinstimmt.
    Vielen Dank

    std::ifstream InPutDatei(Einzeiler);
    std::ifstream InPutDatei2(Mehrzeiler);

    char MByte, EByte;

    while(InPutDatei2 >> MByte) {
    EByte = InPutDatei.get();
    ???



  • mike4 schrieb:

    ich möchte while loopen bis eine Linie vom mehrzeiligen *.txt mit dem
    einzeiligen txt übereinstimmt.

    Heißer Tipp: Zeilenweise einlesen, mit std::getline in std::string.



  • Mit char wird das nichts (kann hoffentlich bekannterweise nur ein Zeichen speichern). Google lautet das Stichwort.



  • Ja wie Zeilenweise einlesen?
    Ich muss char verwenden bis zum loop, rsp ich ändere den Wert im Loop.

    string Str = string(&NewByte);
    string Str2 = string(&Byte2);
    found=Str.find(Str2);
    if (found!=string::npos)

    Obiges klappt nicht. Ursprünglich sah es mit chars so aus:

    while(InPutfile1 >> Byte) {
    /////////////////////////////////////////////////////
    NewByte = DECRYPTION_FORMULA; // New Line! We just change the ENCRYPTION_FORMULA
    // to DECRYPTION_FORMULA, see above
    /////////////////////////////////////////////////////

    Byte2 = InPutfile.get();

    if (Byte2 != NewByte)
    {

    Nun möchte ich aber Zeilenweise vergleichen nach decrypt.
    Vielen Dank



  • Ich kann mit der Problembeschreibung nicht viel anfangen und ich schätze mal, dass es nicht nur mir so geht. Wenn dir eine Lösung deines Problems wichtig ist, solltest du es vielleicht nochmal versuchen, dein Problem neu und detallierter zu beschreiben -- nicht nur dein Ansatz, sondern auch das Problem dahinter, was du mit deinem Ansatz zu lösen versuchst.



  • int main()
    {
    	std::ifstream file("datei.txt");
    	const std::string meineZeile("absflkbsdfjlsdkfbsnf");
    
    	std::string tmp;
    
    	while ( std::getline(file, tmp) )
    	{
    		if ( tmp == meineZeile )
    			// ... your programm...
    	}
    
    	return 0x0;
    }
    

    das ist zeilenweise einlesen mit test auf gleichheit von deiner zeile und der eingelesenen



  • Skym0sh0 schrieb:

    Vielen Dank, das sollte klappen. Versuche es morgen.
    Gruss



  • Nun steckt noch ein Fehler bei putback. InPutfile1 sollte bei jeder Zeile
    mit NewByte geändert werden und erst danach zeilenweise mit InPutfile verglichen werden.
    Nochmals vielen Dank

    std::ifstream InPutfile(InFile);
    std::ifstream InPutfile1(InFile1);
    ifstream InPutfile1n;

    char Byte, Byte2, NewByte;
    size_t found;
    std::string Etmp, Mtmp, PMtmp;
    std::ofstream outFile;

    while(!InPutfile1.eof())
    {
    getline(InPutfile1, PMtmp);
    InPutfile1n.putback(PMtmp);

    if (InPutfile1.fail())
    return 0;
    /////////////////////////////////////////////////////
    NewByte = DECRYPTION_FORMULA; // New Line! We just change the ENCRYPTION_FORMULA
    // to DECRYPTION_FORMULA, see above
    /////////////////////////////////////////////////////
    InPutfile1n.putback(NewByte);

    }

    while(getline(InPutfile1n, Mtmp)) {

    getline(InPutfile, Etmp);

    if (Mtmp != Etmp)
    {



  • mike4 schrieb:

    Nun steckt noch ein Fehler bei putback. InPutfile1 sollte bei jeder Zeile
    mit NewByte geändert werden und erst danach zeilenweise mit InPutfile verglichen werden.

    putback tut nicht, was du glaubst. Insbesondere ändert putback nichts am Dateiinhalt.

    Ich rate dir, die beiden Vorgänge (Ändern und Suchen) komplett voneinander zu trennen. Das bekommst du nicht in einem Aufwasch hin.


Anmelden zum Antworten