Probleme beim Datei auslesen.
-
Hallo ich versuche gerade eine datei auszulesen. aber irgendwie klappt das nnicht so ganz wie ich möchte. hoffe ihr könnt mir helfen.
TCHAR* lAbelTextBuffer = _T("Ready to scan."); TCHAR TfillMsgPuffer(void) { FILE* fp; int count =0; fp=_tfopen(_T("My Documents/scan.txt"),_T("r")); while(feof(fp) == 0){ _ftscanf( fp, _T("%s\n"), lAbelTextBuffer, &count ); _tprintf(_T("%s\n"),lAbelTextBuffer); } fclose(fp); return *lAbelTextBuffer; }wenn ich die funktion aufrufe bekomme ich immer nur den vorher festgelegten wert, also "Ready to scan." raus. habt ihr ne idee warum?
ich arbeite mit TCHAR. also ich das mit nem "normalem" char puffer gemacht habe hat es funktioniert.habt ihr ne idee warum er die variable nicht überschreibt ??
Danke !!!
-
Das gehört wohl eher in C-Forum. In C++ Arbeitet man mit streams.
std::ifstream:
http://www.cplusplus.com/reference/iostream/ifstream/
-
Ich kenne zwar _ftscanf nicht, aber in der Zeile
_ftscanf( fp, _T("%s\n"), lAbelTextBuffer, &count );willst du offenbar zwei Werte einlesen (lAbelTextBuffer,count), im Formatstring fehlt aber das %d für count.
-
Dieses
_TkönntelAbelTextBufferso anlegen, dass es auf einen "readonly"-Bereich zeigt und somit nicht reingeschrieben werden kann.
Zudem bist du sicher, dasslAbelTextBufferausreichend Speicherplatz bietet?!Das ist ja nichtmal Standard-C

-
guten morgen

ja soll ich nun ins C forum wechseln ?? weiss nicht.. sonst soll man mich bitte verschieben.also ich habe meinen code etwas geändert und die variable count rausgeschmissen.
sieht jetzt so aus:
fp=_tfopen(_T("My Documents/scan.txt"),_T("r")); if (fp != NULL){ while(feof(fp) == 0){ // _ftscanf( fp, _T("%s %d\n"), lAbelTextBuffer, &count ); _ftscanf( fp, _T("%s\n"), lAbelTextBuffer); } } fclose(fp);mein problem ist jetzt, dass in lAbelTextBuffer immer nur die erste zeile ausgelesen wird. und nicht alles. die textdatei kann eine variable anzahl an zeilen haben.
geht in ein tchar nicht mehr rein ? oder muss ich dafuer zwingen ein array benutzen ?
danke !!
-
Hallo,
ja soll ich nun ins C forum wechseln ?? weiss nicht.. sonst soll man mich bitte verschieben.
Jetzt sind wir erst mal hier, verschoben wird sicher noch, wenn es entdeckt wird.
geht in ein tchar nicht mehr rein ? oder muss ich dafuer zwingen ein array benutzen ?
Dein TCHAR*, der jetzt hoffentlich nicht mehr auf potenziell schreibgeschützten Speicher zeigt, kann auf eine (quasi) beliebig lange Zeichenkette zeigen, wenn genug Platz dafür reserviert wurde. Aber da du ja immer nur in den gleichen Speicherbereich einliest, können immer nur die gerade gelesenen Zeichen dort sein, diese werden aber mit jedem Schleifendurchlauf überschrieben. Wenn du aber alles aufsammeln willst, dann könnte man str(n)cat statt fscanf verwenden, wobei eine Zeile besser mit fgets ausgelesen wird, denn wenn in einer Zeile Leerzeichen sind, ist für fscanf die Eingabe zu Ende.
MfG,
Probe-Nutzer
-
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-10ausgelesener 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

