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: 12Mit 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=WertDu könntest das nun also etwa so aussehen lassen:
[Leute]
Hallo=56
Hans=89
Claudia=86
Adam=12Und 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.