Teilstring aus .txt-file auslesen

Mahatmas

Mitglied
Servus,

hab heut wohl nen sch*** Tag erwischt. Ich bekomms heut nicht auf die Reihe einen bestimmten String einer Textdatei einzulesen.

Hier ist meine Textdatei:
Code:
Inst"20.03.1962"   | Installationsdatum
Leit"V14.61"      | Leitversion
Text"V14.01-3;V14.03-7;V14.01-9"      | Textversion
Konf"V 4.40"       | Konfigversion

Jetzt möchte ich in der 2. Zeile den Teil in Anführungszeichen (V14.61) in ein CString packen...

Code:
{
	CString readVers = "\\Disk00\\Version.txt";
	CString path;
	CString leit;
	string  line;
	CString length;
	
	for(int j = 0; j < anzVersionen; j++)   // mehrere Textfiles öffnen mit dem selben Aufbau
	{
		path=version[j]+readVers;
		//AfxMessageBox(path);				// path: selectedPath\Disk00\Version.txt

		ifstream input(path);
		
		if (input.is_open())				
		{
			string strLine;
			while(getline(input, strLine))
			{    
				CString cs(strLine.c_str());
				CString SuchString(cs);
				CString zwischen;
				CString Suche1("Leit\"");
				CString Suche2("\"");
					
				int Index1 = SuchString.Find(Suche1);
				int Index2 = SuchString.Find(Suche2, Index1);
				zwischen = SuchString.Mid(Index1+Suche1.GetLength(), Index2-Index1-Suche1.GetLength());
				AfxMessageBox(zwischen);
				
			}
			input.close();
		}
	}
}

So gibt er mir nichts raus. Wenn ich aber anstatt des Anführungszeichens ein "|" nehme, erhalte ich meinen Teilstring, bloß mit dem verdammten Anführungszeichen dabei: V14.61". Also scheint das ja irgendwie zu funktionieren. Nur halt Problem mit dem Anführungszeichen nicht...

Wahrscheinlich habt ihr so ein dubiosen Code schon lang nicht mehr gesehen, aber naja...
Will halt den Teil zwischen Leit" und dem nächsten "

Hoffe mir kann einer helfen. Ein kleiner Code wie ich so ein Teilstring auslesen kann wär super.

Schon mal Danke...

Gruß
Mahatmas
 
Hallo,

du erwischt bei "Index2" das erste Ausführungszeichen nochmal. Du musst bei dieser Suche an der gefundenen Position plus
der Länge von "Suche1" beginnen:
C++:
int Index1 = SuchString.Find(Suche1);
int Index2 = SuchString.Find(Suche2, Index1 + Suche1.GetLength() + 1);
Gruß
MCoder
 
Danke, jetzt hab ich meinen String den ich wollte. (V14.61)

Nur werden jetzt auch die anderen Teile ausgelesen... nämlich "20.03.1962 , "V14.01-3;V14.03-7;V14.01-9 und "V 4.40

Muss jetzt wohl in einer Schleife nur jeden Vierten auswählen oder kann man dies noch auf eine andere Weise lösen?
 
Hallo,
du musst prüfen. ob die erste Suche erfolgreich war:
C++:
if( Index1 != (-1) )
{
    // Weitersuchen und Substring holen
}
Gruß
MCoder
 
Jo, Dankeschön...

Hab es jetzt aber schon über eine Art Schleife ab. Ich frag einfach, ob der Index durch 4 einen Rest von 1 ergibt und dann nehm ich diesen String, da der Aufbau meiner Textfiles immer gleich ist.

Code:
if(i%4==1)
{
	leitvers[l]=zwischen[i];
	//AfxMessageBox(leitvers[l]);
	l++;
}
i++;

Bestimmt nicht fachgerecht gelöst, aber es funktioniert. Und das ist jetzt erstmal die Hauptsache.

Aber beim nächsten Mal weiß ich Bescheid, nochmal Danke...

Gruß,
Mahatmas
 
Zurück