CString konvertieren bzw. Nullterminierten String konvertieren



  • Hallo!

    Bin grad dabei eine MFC-Anwendung zu erstellen.
    In einem benutzerdefiniertem Dialogfeld wird ein CString mittels eines Kombinationsfeld eingelesen.

    Aus einer Datei lese ich wie in C einen char-String (nullterminiert) ein,
    welchen ich mit dem aus dem Textfeld auf Übereinstimmung vergleichen will.

    Also habe ich versucht den Nullterminierten in einen CString zu konvertieren.
    Wenn ich beide Strings in einer Messagebox anzeige, scheinen sie übereinzustimmen.

    Beim Vergleich(habe schon probiert mit .Compare und .Find) kommt aber immer ein Ungleich zurück!

    Was mache ich falsch, bzw. geht es irgendwie anders, einfacher?

    Bitte um schnelle Antworten!
    Danke im Voraus

    mfg

    PS: Wie kann ich in der Laufzeit Auswahlmöglichkeiten ins Kombinationsfeld stellen? (Also nicht beim Programmieren selbst definieren, sondern das Programm selbst, z.B. nach Strings die in einer Datei stehen)



  • holh schrieb:

    PS: Wie kann ich in der Laufzeit Auswahlmöglichkeiten ins Kombinationsfeld stellen? (Also nicht beim Programmieren selbst definieren, sondern das Programm selbst, z.B. nach Strings die in einer Datei stehen)

    Mit AddString, wenn du eine Controlvariable hast.



  • Ehm, Compare liefert eine 0 wenn die Strings gleich sind. Sicher, dass du sowas gemacht hast?

    if(s1.Compare(s2) == 0) // machwas
    


  • Hab folgendes gehabt:

    if(m_dPFilterDlg.m_person.Compare((LPCSTR)line)==0)
    

    Nur weiß ich nicht ob ich das mit der Typumwandlung richtig gemacht hab.
    line wurde so definiert:

    char line[100];
    

    und dann eine binäre datei so geöffent:

    FILE* datei;
    datei = fopen("Data.bin", "rb");
    
    UpdateData(FALSE);
    
    while(fread(line, sizeof( char ), 100, datei ) != NULL)
    	{ ... }
    

    Danke für die bisherigen Antworten



  • Kann mir keiner helfen?

    Sonst halt irgendeine andere Möglichkeit wie ich Texte aus einer Binärdatei(wenns leichter geht, von mir aus auch aus einer ASCII-Datei)
    mit dem CString aus einem Kombinationsfeld aus einem Dialog vergleichen kann?

    Brauche dringend eure Hilfe!

    Finde auch in meinen Büchern nichts dergleichen!

    mfg



  • Mir wird der zweck der ganzen Übung nicht klar? Warum öffnest Du das File Binär (mit fopen, CFile wäre zumindest MFC) und Verarbeitest dann Text. Is das File gemischt (Binär- und Text- daten)? Dann ist anzunehmen, das Du den String line nicht Terminierst('\0'), so kann das dann nichts werden.

    Um weiterzuhelfen müßte man den Aufbeu den Datei kennen.

    Gruß



  • Oh, wie würde das mit CFile gehen?
    (Steht leider nichts davon in meinem Lehrbuch :p )

    Die Daten bestehen aus Namen, welche mit \n getrennt sind.
    Die Namen sind verschiedenen Gruppen zugeordnet.

    Beispiel:

    GRUPPE1:
    Titel Vorname Nachname
    Titel Vorname Nachname
    Titel Vorname Nachname

    GRUPPE2:
    Titel Vorname Nachname
    Titel Vorname Nachname
    ...

    Lässt sich damit was anfangen?

    Danek für die Hilfe!



  • Hier mal ein Vorschlag (MSVC7.0 oder höher):

    CFile FD;
    	if(FD.Open("Data.txt",CFile::modeRead) == TRUE)
    	{
    		CString buffer,line;
    		FD.Read(buffer.GetBufferSetLength(FD.GetLength()),FD.GetLength());
    		buffer.ReleaseBuffer();
    
    		int curPos = 0;
    		line = buffer.Tokenize("\r\n",curPos);
    		while (line != m_dPFilterDlg.m_person)
    		{
    			line = buffer.Tokenize("\r\n",curPos);
    		};
    
    		//in line ist jetzt der Datensatz(Zeile)
    	}
    

    m_dPFilterDlg.m_person muß genau so aussehen wie eine Zeile im File. Ansonsten geht das nicht. Eventuell Breakstring ("\r\n" -> Window Zeilenumbruch) in Tokenize ändern.

    Gruß



  • Danke für die Antwort!

    Kann es sein das niedrigere Versionen von MVC Tokenize nicht kennen?

    Habe leider nur VC6.0, der sagt Tokenize ist kein Element von CString!



  • Bei CStdioFile könntest du gleich zeilenweise einlesen und dir das Tokenize sparen. 🙂



  • @ estartu habs so gemacht, es funktioniert einwandfrei!

    Danke viiiielmals an alle!

    Auf euch kann man sich doch verlassen!

    Vielen Dank!
    Grüße


Anmelden zum Antworten