ReadString ab Zeile 4



  • Hallo, beschäftige mich erst seit einer Woche mit VISUAL C++ drum entschuldigt die wahrsheinlich einfache Frage: Ich hab eine Datei nach dem Muster:

    Hallo: 56
    Hans: 89
    Claudia: 86
    Adam: 12

    Mit dem folgendem lese ich die ersten 3 Zeilen der Datei, teile den String auf und gebe die Zahlen wieder aus. Klappt wunderbar.

    Aber wie lese ich z.B. nur Zeile 2,3 und 4 aus?

    CStdioFile Datei(m_pathname, CFile::modeRead); //Datei mit modus Lesen öffnen
    
    	CString strTemp, cp[3]; 
    	int i=0;
    	while(Datei.ReadString(strTemp) && i<3) //3 da es nur soviele ein bzw ausgabefelder gibt
    	{ 
    
    	//Teilen des Stings Zeilenweise
    		int l = strTemp.GetLength();
    		if (l>0) 
    		{
    			int j = strTemp.Find(":");
    			if (j != -1) 
    			{
    				cp[i] = strTemp.Left(j);
    				cp[i].TrimRight();
    				strTemp = strTemp.Right(l - j - 1);
    			} 
    
    			else 
    			{
    				cp[i] = strTemp;
    				cp[i].TrimRight();
    				strTemp = "";
    			}
    		} 
    
    	//MessageBox(cp[i]+"cp");
    	//MessageBox(strTemp);
    	m_EDIT[i]=strTemp;
    	i++;
       	} 
    	Datei.Close();
    
    	UpdateData( FALSE ); // Variablen ---> Felder
    


  • Du musst alle Zeilen lesen und die unerwünschten aussortieren.

    Oder du baust die Datei anders auf und nimmst eine ini-Datei, da kannst du auf einzelne Zeilen zugreifen. Das ist aber wohl eher nix für Anfänger im frühen Stadium. Sollte es dich trotzdem interessieren, sag Bescheid.

    🙂



  • ini-Datei, warum nicht?

    hab in der FH mal bissel Borland c++ gehabt versteh also meistens den Code, komm aber noch nicht auf die Ideen und ....

    wenn Du dazu paar Tips oder Links bzgl ini-Datein wäre ich sehr Dankbar

    🙂



  • Hmm, okay. Mal nachdenken, was brauchst du alles?

    Also:
    Die Applikation muss den Namen der ini Datei wissen, das sagst du ihr so:

    //First free the string allocated by MFC at CWinApp startup.
    	//The string is allocated before InitInstance is called.
    	free((void*)m_pszProfileName);
    	//Change the name of the .INI file.
    	//The CWinApp destructor will free the memory.
    	m_pszProfileName=_tcsdup(_T("c:\\myini.ini"));
    

    Guck dir dazu auch die MSDN zum Thema "m_pszProfileName" an.

    Den Befehl habe ich lieber auskommentiert, weil eine App nur ENTWEDER die Registry ODER eine ini nutzen kann.

    SetRegistryKey(_T("Local AppWizard-Generated Applications"));
    

    Und so schreibst du da was rein:

    WriteProfileString("Section", "Name", "Wert");
    

    Es gibt noch WriteProfileInt(...), GetProfileString und GetProfileInt.

    Wie weit die anderen Registryfunktionen nutzbar sind, weiss ich nicht.

    -----------------------------------------------------------------------

    Ich habe den Code oben einfach in mein InitInstance gepackt und ausgeführt. Dann hatte ich auf C: eine myini.ini mit folgendem Inhalt:

    [Section]
    Name=Wert

    Du könntest das nun also etwa so aussehen lassen:

    [Leute]
    Hallo=56
    Hans=89
    Claudia=86
    Adam=12

    Und schon kriegst du mit einem Befehl

    int nHallo = GetProfileInt("Leute", "Hallo", 0);
    

    den Wert 56 in nHallo.

    Tja, soweit hab ich mir das mal erarbeitet und bis heute nicht vergessen. Das hier ist also eine Frickellösung und vielleicht nicht die eleganteste Methode - aber sie funktioniert. 🙂

    Viel Spaß weiterhin



  • Vielen Dank für die schnelle Antwort. 👍
    Werd mich da jetzt mal duchwuseln
    😉



  • hat bei mir nicht so ganz geklappt. keine Ahnung was ich falsch gemacht habe.
    Bin auf folgendes gestoßen:

    int ret =  WritePrivateProfileString("Section", "Name","eins","c:\\DATRREN\\MFC\\trew.ini");
    

    klappt wunderbar zumindest das schreiben, lesen muß ich noch testen



  • Was du da gefunden hast wird von dem was ich dir geschrieben hatte benutzt.

    Ist also die selbe Lösung, nur etwas tiefer in der MFC angesetzt.


Anmelden zum Antworten