Probleme beim Datei auslesen.



  • jau mit fgets geht es... dafuer brauch ich aber nen "normales" char. da ich aber die ganze zeit mit TCHAR arbeite muss ich mein char dann iregdnwie zu einem TCHAR machen. das bekomm ich aber nicht so ganz hin.
    hier der code bis jetzt:

    FILE* fp;
    char mystring [100];
    
    fp=_tfopen(_T("My Documents/scan.txt"),_T("r"));
    
    	if (fp != NULL){
    		while(feof(fp) == 0){
    			fgets (mystring ,100, fp);
    			puts (mystring);
    			_ftprintf (mystring, _T("%s"));
    		}
    	}
    
      fclose(fp);
    

    jetzt müsste ich aus dem mystring nur noch ein TCHAR machen dann wär es perfekt 🙂

    danke !!

    EDIT:
    irgendow haut er mir aber noch einen fehler rein.

    originaltext:

    HUI-9999-01-10
    HUI-9999-01-10
    401229702525
    401229702525
    HUI-9999-01-10

    ausgelesener text:

    HUI-9999-01-10

    HUI-9999-01-10

    401229702525

    401229702525

    HUI-9999-01-10

    HUI-9999-01-10



  • if (!fgets (mystring ,100, fp)) break;
    

    ?



  • also hiermit liest er richtig aus. macht aber zu jeder zeile immer noch die leerzeile:

    if (fp != NULL){
    
    		 while(fgets(mystring,100,fp))
          {
             puts(mystring);
    		 _ftprintf (mystring, _T("%s"));
          }
    	}
    

    und ich muss von char auf TCHAR kommen 🙂

    Danke euch !!



  • macht aber zu jeder zeile immer noch die leerzeile:

    Lies doch bitte auch nach, was die Funktionen, die du verwendest, machen:

    MSDN-Doku schrieb:

    The puts function writes str to the standard output stream stdout, replacing the string's terminating null character ('\0') with a newline character ('\n') in the output stream

    ...und da fgets selbst den Zeilentrenner mit einliest, haben wir schon die Ursache...

    MSDN-Doku schrieb:

    jetzt müsste ich aus dem mystring nur noch ein TCHAR machen dann wär es perfekt 🙂

    Und was hält dich davon ab (wahrscheinlich puts und fgets, aber siehe unten):

    TCHAR mystring [100];
    

    Verbleibt als kleine Restaufgabe nur noch, die richtigen (d.h. welche, die mit TCHAR umgehen können) Funktionen für fgets und puts zu schreiben.

    MfG,

    Probe-Nutzer



  • ok das mit dem TCHAR habe ich gelöst 🙂 .. jetzt bleiben nur noch die leerzeilen 🙂

    MSDN-Doku schrieb:

    The puts function writes str to the standard output stream stdout, replacing the string's terminating null character ('\0') with a newline character ('\n') in the output stream

    ...und da fgets selbst den Zeilentrenner mit einliest, haben wir schon die Ursache...
    [/quote]

    was soll das denn der der da ne newline macht .. soll er mal bleiben lassen 😛

    ne aber gibts da irgendwie nen befehl der das unterbindet? oder muss ich dann wieder komplett anders einlesen?

    in der msdn habe ich nicht direkt eine lösung gefunden.

    FILE* fp;
      TCHAR mystring [100];
    
      fp=_tfopen(_T("My Documents/scan.txt"),_T("r"));
    
    	if (fp != NULL){
    
    		 while(_fgetts(mystring,100,fp))
          {
             _putts(mystring);
          }
    	}
    
      fclose(fp);
    
      _ftprintf (mystring, _T("%s"));
    
      return *mystring;
    


  • if (mystring[strlen(mystring-2)] == '\n')
      mystring[strlen(mystring-2)] = 0;
    

    Einfach das Newline entfernen sollte reichen.

    Oder nicht _putts verwenden.



  • hört sich einleuchtend an 🙂 aber irgednwie will das nicht so ganz.

    FILE* fp;
      TCHAR mystring [100];
    
      fp=_tfopen(_T("My Documents/scan.txt"),_T("r"));
    
    	if (fp != NULL){
    
    		 while(_fgetts(mystring,100,fp))
          {
    
             _putts(mystring);
    		 if (mystring[_tcslen(mystring-2)] == _T('\n')){
    			 	mystring[_tcslen(mystring-2)] = 0;
    		 }
          }
    	}
    
      fclose(fp);
    

    also er packt den ausgelesenen string in mystring, danach guckt er in mystring nach ob ein \n vorhanden ist, wenn ja macht er daraus eine 0.

    aber irgednwie passiert gar nichts. falsch eingebunden ??

    hmm..



  • Wie wäre es mit:

    mystring[_tcslen(mystring) - 1] = 0;
    

    Wenn du das if auch wieder einbauen willst, dann dort entsprechend die gleiche Position abfragen.

    Und das ganze bitte bevor mit _putts ausgegeben wird.

    MfG,

    Probe-Nutzer



  • danke das du/ihr so geduldig bist. aber irgendwie funktioniert es immer noch nicht.

    FILE* fp;
      TCHAR mystring [100];
    
      fp=_tfopen(_T("My Documents/scan1.txt"),_T("r"));
    
    	if (fp != NULL){
    
    		 while(_fgetts(mystring,100,fp))
          {
    
    		 mystring[_tcslen(mystring-1)] = 0;
             _putts(mystring);
          }
    	}
    
      fclose(fp);
    
      lAbelTextBuffer = mystring;
    
      _ftprintf (mystring, _T("%s"));
    

    liegt es vllt an der ausgabe? da sollte doch alles passen oder ???

    ich habe es auch schon so versucht:

    mystring[_tcslen(mystring-1)] = _T('0');
    

    aber das hat leider auch nicht geholfen 😕

    danke !!



  • Du hast es ja auch nach puts gepackt.
    Das an mystr[strlen(mystr)-1] 0 steht sollte eigentlich Bedingung sein. Nur sollte eben sichergestellt werden das an strlen(mystr)-2 kein \n steht.



  • susan81 schrieb:

    liegt es vllt an der ausgabe? da sollte doch alles passen oder ???

    Findest (und besser noch, verstehst) du den Unterschied zwischen:

    mystring[_tcslen(mystring-1)] = 0;
    

    und meinem Vorschlag:

    mystring[_tcslen(mystring) - 1] = 0;
    

    ?

    Jetzt will ich aber eine Erfolgsmeldung hören 😉

    MfG,

    Probe-Nutzer



  • sehr peinlich... 🙄

    jetzt geht es.

    danke das du so viel geduld mit mir hattest 🙂

    😘


Anmelden zum Antworten