zeilen weise aus txt lesen



  • if(file1.Open(pfad,CFile::modeRead,&e))
    	{
    		char puffer[500];
    
    		MessageBox("txt");
    		// zum einlesen der einzelnen zeilen
    		ifstream file(pfad,ios::in);
    
    		// solange das ende des Files nicht ist weiter lesen
    		while(!file.eof())
    		{
    
    			file.getline(puffer,500);
    			MessageBox(puffer);
    		}
    	}
    

    Hallo,

    das ist mein code mit dem ich versuche den inhalt eines files zu lesen und diesen dann zeilenweise in einer MessageBox auszugeben.
    Er gibt nur die MessageBox in einer endlosschleife aus, aber ohne inhalt.
    Liegt es vielleicht daran dass das File gehöffnet wird mit CStdioFile nicht ncoh mal mit ifstream geöffnet werden kann um, dann zeilen weise einzulesen.
    Ich weiss aber nicht wie ich sonst aus dem File zeilenweise auslesen kann.
    pfad ist vom typ CString.
    Kann mir jemand zeigen wie es besser geht??
    Wäre echt nett, danke



  • Du kannst nicht mit CStdioFile arbeiten und dazwischen dann mit Streams.
    Entweder Streams :

    #include "fstream.h"
    
    fstream file;
    char buf[MAX_PATH] = "";
    
    file.open("C:\\...", ios::in | ios::nocreate);
    
    if(file.is_open())
    {
       while(! file.eof())
       {
          file.read(buf, sizeof(buf)-1);
    
          CString str;
          str.Format("%s", buf);
    
          AfxMessageBox(str);
    }
    else
    {
       //Fehlerbehandlung...
    }
    

    Oder du arbeitest mit CStdioFile:

    CStdioFile file;
    CString str;
    
    if(file.Open("C:\\...", CFile::modeRead))
    {
       while(file.ReadString(str))
       {
          AfxMessageBox(str);
       }
    }
    

    Hoffe konnte dir weiterhelfen...

    Gruß
    :: NoName ::



  • Ja konntest du danke



  • Hab noch mal was

    CStdioFile file;
    CString str;
    
    if(file.Open("C:\\...", CFile::modeRead))
    {
       while(file.ReadString(str))
       {
          AfxMessageBox(str);
       }
    }
    

    von dem ausgelesenen str würde ich gerne eine kopie haben, diese soll aber drei zeichen weniger am schluss haben wie die str hat.

    str2 = str - 3;
    

    ich kann aber nicht gleich mit drei zeichen weniger einlesen, da ich das orginal str noch brauche.

    wie geben ich das ein.
    ich weiss leider nur wie das bei dem stream funzt.
    das geht aber irgendwie dabei nciht



  • str2 = str.Left(str.GetLength() - 3);
    er speichert Länge - 3 Zeichen von links gelesen.



  • das funzt gut

    aber jetzt möchte ich von dem neu erstellt string nur den REst angezeigt bekommen der ab dem letzten \\ steht.



  • Halt eben so ähnlich :

    [cpp]

    CString str2 = str - str.Left(str.ReverseFind('\'));

    str2.Left(str.GetLength() - 3);

    [/cpp]

    ab das minus geht halt nicht....



  • keiner eine Idee???



  • while(str.Right(str.ReverseFind('\\')))
    {	
    str.Right(str.ReverseFind('\\'));
    CString str2 = str;
    }
    

    Dabei macht er nciht viel
    Hat viellciht jemand einen Tipp wie ich das schaffe
    nur den Rest des Stringens der hinter dem letzten \ steht, weiter verarbeitet wird.

    Mal eine kurze erklärung :

    Der string der ausgelesen wird ist einen Pfad angabe. von dem brauche ich aber nur den Namen des Files. Damit ich dann unter gleichen Namen nur andere Ordner und andere dokumentenart (txt) ein neues erstellen kann.



  • CString pfad = "C:\\temp\\projekte\\Test\\Juhu";
    
    	AfxMessageBox(pfad.Right(pfad.GetLength() - pfad.ReverseFind('\\') - 1));
    


  • Hallo,

    ich glaube ich weiss jetzt warum das alls bei mir nicht funzt.
    Ich habe im String nur ein \ stehen.
    Also muss ich doch erst alle \ zu \\ machen und dann weiter wie oben beschrieben, oder??

    Geh das mit remove?? muss ich erst noch find sagen??

    Kann mir mal einer ein bsp zeigen???



  • Das von mir gepostete Beispiel zeigt von dem CString die letzte Zeichenkette an die nach dem \\ steht. Somit hast du ja dein Beispiel schon...



  • ne das geht nicht wegen der Escapesequenzen (heissen die so??)

    deswegen muss ein pfad der geöffnet werden soll zwei \\ haben sonst erkennt der das nach dem \ als befehl an
    wie \n

    ich weiss nciht ob das jetzt so richtig ist was ich gesagt habe aber ich weiss was ich meien hoffentlich ihr auch...

    Ach ja wenn ich einfach bei deinem ein \ weg mache würde der compiler (linker??) lesen \' , macht aber keien sinn



  • Benutze doch einfach PathRemoveFileSpec(), dabei entfernt er die Datei vom Pfad und der Pfad bis zum Ordner bleibt übrig :

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathremovefilespec.asp

    Gruß
    :: NoName ::



  • ich kan doch kein CString zu char umwandeln, das sagt mir zumindest der compiler.

    ich weiss wirklich nicht weiter, ich hänge seit gestern abend daran. Hab schon einige versionen getestet, aber es funzt ja keine.

    Also nochmal
    ich habe eine CString variabele die eine Pfad enthält, dieser Pfad hat aber immer nur ein \ dazischen statt \.

    Ich möchte einfach nur das ende des strings haben ( also name des Files), um diesem dann die letzten drei zeichen zu nehmen und drei neue dran zu hängen.
    und natürlich vorher einen neuen Pfad, zu einem anderem Ordner, an zuhängen um daruas dann wieder ien neues file zuerstellen.

    Aber ich weiss nciht mehr wie und mein kopf steht auch schon wo anderes....

    Also bitte ich euch, wirklich ganz lieb, um ein wenig genauere und am besten realistische beispiele.



  • schritt für schritt

    zuerst bei dem ausgelesen Pfad all \ zu \\ machen.

    str.Replace('\','\\');
    

    Hierbei gibt er mir aber ungültige escapefolge als fehler aus

    ohne ' ' gibt aber ebenso einen fehler aus.

    hat jemand einen tip???
    BIITTTEEEE



  • Ich hab dir hier mal ein kleines Beispiel geschrieben. Der Code erstellt zuerst eine neue File-Extension (er erstellt drei neue Zeichen am Ende der Datei), und dann formatiert er den String so, dass du einen neuen Pfad plus der neuen Datei hinzufügen kannst :

    CString strNewExe, strNewFilePath;
    
    	CFile file;
    	if(file.Open("C:\\Test\\Test2\\Test.txt", CFile::modeRead))
    	{		
    		strNewExe = file.GetFileName();
    
    		PathRenameExtension((char*)(const char*) strNewExe, ".exe");  /* In strNewExe steht die Datei mit der neuen File-Extension */
    		AfxMessageBox(strNewExe);		
    
    		strNewFilePath.Format("C:\\Neuer Pfad\\Neuer Pfad\\%s", strNewExe); /* in strNewFilePath steht jetzt der neue Pfad mit der neuen Datei */
    		AfxMessageBox(strNewFilePath);
    
    		file.Close();
    	}
    

    Die Messageboxen sind zum prüfen des Inhaltes in den Strings...
    Hoffe konnte dir helfen...

    Gruß
    :: NoName ::



  • Test1Dlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__PathRenameExtensionA@8
    Release/Test1.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

    ist der fehler der dabei ausgespuckt wird



  • Linke mal die SHLWAPI.lib mit



  • #include "Shlwapi.h"

    ist drin



  • ja, du musst aber auch die lib datei beim linken mitgeben.
    schreib oben mal noch
    #pragma comment(lib,"Shlwapi.lib"); rein


Anmelden zum Antworten