Win32 C++ vergleiche String Inhalt

HansJ

Mitglied
Hallo,
ich komme mal wieder nicht weiter.

Aus einer Datei lese ich eine Varialbe ein "szBuf" diesen möchte ich zerlegen und 3 neue Strings erzeugen.
Da die einzelnen Felder unterschiedlich lang sein können habe ich verschiedene Trennzeichen dazwischen gesetzt.

Inhalt der Text Datei
111111*22222#33333

Die neuen Variblen sollen dann so aussehen

Var1 = 111111
Var2 = 22222
Var3 = 33333

Code:
ch = fgetc( stream );
   for( i=0; ( feof( stream ) == 0 ); i++ )
   {
      szBuf[i] = (char)ch;
      ch = fgetc( stream );
   }

for( iZaehler=0; (iZaehler == i); iZaehler++ )	
   {
      szSammel[iZaehler] = szSammel[iZaehler] + szBuf[i];

      if ((szSammel[iZaehler]) == TEXT("*"))
	{
	wcscpy(szDatei, szSammel);
	}
    }

Bekomme ich diesen Fehler angezeigt.

error C2446: '==' : no conversion from 'const wchar_t *' to 'int'
 
Hi.

Also erstmal programmierst du offensichtlich in C - ich kann jedenfalls keine C++ Konstrukte entdecken.

Dann solltest du beim Einlesen immer auch (mit ferror) prüfen ob der Stream in einem Fehlerzustand ist, denn dann kann nichts mehr gelesen werden - auch EOF nicht.

Dann kannst du Strings in C nicht mit == vergleichen. Das geht nicht da du nur Pointer miteinander vergleichen würdest und die sind nur gleich wenn sie wirklich auf die gleiche Adresse zeigen.

Um Strings zu vergleichen mußt du z.B. die Funktion strncmp bzw. _tcsncmp verwenden.

Gruß
 
Die Daten wurden tatsächlich nicht eingelesen.
Jetzt werden sie eingelesen und auch in "szSammel" geschrieben.

Ich komme aber leider nicht mit dem "wcscmp" zurecht

In dieser Zeile wird mir der Fehler angezeigt

error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'

Hier ist ein Ausschnitt aus dem Programm wo meine Porbleme stecken.

Code:
char szStern[] = "*";
char szBuf[81];
char szSammel[];
int  i, ch, iZaehler, iSammel;


iSammel = 0;

if( (stream = fopen( "\\Application\\mail.txt", "r" )) == NULL )
      exit( 0 );

ch = fgetc( stream );
	
for( i=0; ( feof( stream ) == 0 ); i++ )
     {
     ch = fgetc( stream );
     szBuf[i] = (char)ch;
     }

for( iZaehler=0; (iZaehler != i); iZaehler++ )	
      {
      szSammel[iSammel] = szBuf[iZaehler];
      iSammel++;

      if (wcscmp( szBuf[iZaehler],szStern ))	
	{
	wcscpy(szDatei, szSammel);
	}
      }

fclose( stream );
 
Ah, ich sehe gerade du willst ja gar keine Strings vergleichen, sondern nur Zeichen. Du hast versucht ein Zeichen mit einem String zu vergleichen und das geht eben wie schon gesagt nicht.

Code:
if (szBuf[iZaehler] == TEXT('*'))

Allerdings brauchst du das gar nicht so kompliziert zu machen, du kannst eigentlich gleich die Funktion strchr bzw. _tcschr verwenden die in einem String nach einem bestimmten Zeichen sucht.

Code:
if ((pos = _tcschr(szBuf, _T('*'))) != NULL) {
  pos = _T('\0'); /* einfach nullterminieren. */
  _tcscpy(dest, szBuf);
  if ((pos = _tcschr(pos+1, _T('#'))) != NULL) {
    pos = _T('\0');
    ...
  }
}
Und da dein Puffer nur eine begrenzte Zahl Zeichen aufnehmen kann solltest du das Einlesen ungefähr so machen:
Code:
for (i = 0; !feof( stream ) && !ferror( stream ) && i < sizeof(szBuf) / sizeof(szBuf[0]) - 1 ; i++)

Dann verwendest du char Puffer zusammen mit wide character Funktionen die auf dem Zeichentyp wchar_t operieren. Das könnte schiefgehen. Nimm lieber die generischen Funktionen aus tchar.h mit dem Typ tchar.

Gruß
 
Zurück