hilfe bei auslesen aus einer datei in string
-
danke erstmals für die hilfe, meine Lösung sieht jetzt für fseek folgendermasen aus:
fseek(datei,0,SEEK_SET)
Allerdings meldet er einen fehler bei der darauffolgenden schleife in zusammenhang mit dem sscanf, kann mir bitte jemand sagen welchen Syntax- Fehler ich in den Schleifen gemacht habe /gemacht haben könnte?
mfg.max_88
-
ich will ja nicht drängen, aber ich benötige dringend hilfe, ist ein Teil eines projektes und ohne dass wird das weitermachen etwas schwierig!
ich zähle auf euch!!
-
Wenn du uns die Fehlermeldung nicht sagst, können wir dir auch nicht helfen ;).
Hast du meinen letzten Absatz auch beachtet?? Erst nachdem fgets() den Status zurückgeliefert hat, dass das Dateiende erreicht wurde, kann das auch feof()! D. h. du musst in deiner Schleife den Rückgabewert von fgets() prüfen.
-
[C++ Error] machz.cpp(126): E2285 Could not find a match for 'sscanf(undefined,char *,char)'.
printf("\n%d",z1); zeichenfeld=(char) malloc(z1*sizeof(char)); fseek(datei,0,SEEK_SET); while(!feof(datei)){ //funktioniert nicht!! fgets(feldch,z1,datei); // sscanf(&zeichenfeld,"%d",feldch2[index]); sscanf(&zeichenfeld[index],"%d",feldch[index]); index++; }
ich verzweifle langsam, hab schon wirklich alles mir bekannte ausprobiert, kann mirjemand eine Problemlösung vorschlagen!??!!?!??!!?!?
ich hoffe ich kann auf euch zählen!
-
max_88 schrieb:
ich verzweifle langsam, hab schon wirklich alles mir bekannte ausprobiert, kann mirjemand eine Problemlösung vorschlagen!??!!?!??!!?!?
ich hoffe ich kann auf euch zählen!erstmal brauchste ein paar variablen
FILE *datei; long groesse; char dateiname[MAX_PATH]; // <<- hier pfad angeben char *zeichenfeld; int index;
'dateiname' solltest du natürlich mit dem namen der gesuchten datei füllen (so wie du's z.b. mit scanf gemacht hast). als nächstes brauchste die grösse der datei. das geht z.b. mit fseek. das rewind bringt den dateizeiger wieder auf den anfang
// datei öffnen, grösse rauskriegen datei = fopen (dateiname, "rb"); fseek (datei, 0, SEEK_END); groesse = ftell(datei); rewind(datei);
jetzt holste dir speicher für den dateiinhalt
zeichenfeld = malloc(groesse);
und so kannste z.b. die datei einlesen
index = 0; while(1) { int c = fgetc (datei); if (c == EOF) break; zeichenfeld[index++] = (char)c; }
zum schluss noch ein kleiner test, dass auch alles geklappt hat
for (index=0; index<groesse; index++) putchar (zeichenfeld[index]);
btw: in einem echten programm musste noch die rückgabewerte der FILE-funktionen beachten. hoffe das hilft
-
DANKE!!!!!!
Werde es gleich mal ausprobieren...... Falls noch Fragen sind melde ich mich....
-
max_88 schrieb:
[C++ Error] machz.cpp(126): E2285 Could not find a match for 'sscanf(undefined,char *,char)'.
printf("\n%d",z1); zeichenfeld=(char) malloc(z1*sizeof(char)); fseek(datei,0,SEEK_SET); while(!feof(datei)){ //funktioniert nicht!! fgets(feldch,z1,datei); // sscanf(&zeichenfeld,"%d",feldch2[index]); sscanf(&zeichenfeld[index],"%d",feldch[index]); index++; }
ich verzweifle langsam, hab schon wirklich alles mir bekannte ausprobiert, kann mirjemand eine Problemlösung vorschlagen!??!!?!??!!?!?
ich hoffe ich kann auf euch zählen!
Ich seh schon woran es liegt. Du verwendest sscanf() falsch, darum auch der Fehler vom Compiler. Dein sscanf() sollte so aussehen:
... sscanf(feldch, "%d", zeichenfeld+index); ...
Zuerst kommt der String aus dem du was auslesen willst, dann dein Formatstring und danach die Variablen in denen formatiert gespeichert werden soll :).
-
es funktioniert, danke!!!
Eines noch, ist es möglcih wenn ich ein unterprogramm habe und den sollte eigentlich ein wert übergeben werden, dieser funktion keinen Wert zu übergeben!??!!?!??!
-
max_88 schrieb:
Eines noch, ist es möglcih wenn ich ein unterprogramm habe und den sollte eigentlich ein wert übergeben werden, dieser funktion keinen Wert zu übergeben!??!!?!??!
Meinst du mit Unterprogramm ein separates Programm, dass du per system() aufrufst oder meinst du damit eine Funktion?
-
damit meine ich eine Funktion!
Ach ja, noch etwas.... ich habe die zeichen der DAtei nun herausgelsesen, jedoch sind auch die Zeilenumbrüche mit in dem feld! bekommt man die irgendwie weg, oder ist das egal wenn man mit dem arbeitetd?!!?
-
max_88 schrieb:
damit meine ich eine Funktion!
Möglich wäre es schon, da müsstest du aber mit variablen Parametern arbeiten und das ist so ne Sache.
Du könntest dir auch einen Dummy-Parameter-Wert ausdenken, wenn nötig.
Warum muss eigentlich in dem einen Fall etwas übergeben werden und im anderen nicht? Vielleicht sollte man da mal ansetzen.
max_88 schrieb:
Ach ja, noch etwas.... ich habe die zeichen der DAtei nun herausgelsesen, jedoch sind auch die Zeilenumbrüche mit in dem feld! bekommt man die irgendwie weg, oder ist das egal wenn man mit dem arbeitetd?!!?
Wegkriegen kannst du sie auf jeden Fall :). Ob sie stören, kommt darauf an, was du mit dem Inhalt machst.
... char *pos; ... //Ermittle die Position, an der in der eingelesenen Zeile der Zeilenumbruch steht. pos = strchr(zeile, '\n'); //Wenn ein Zeilenumbruch gefunden wurde if(pos > 0) { //Ersetze den Zeilenumbruch durch das Stringendezeichen *pos = 0; } ... //--------------------------------------------------- //Alternative ... unsigned int anz; ... //Anzahl der Zeichen in der eingelesenen Zeile ermitteln anz = strlen(zeile); //Prüfen, ob das letzte Zeichen ein Zeilenumbruch ist if(zeile[anz-1] == '\n') { //Ersetze den Zeilenumbruch durch das Stringendezeichen zeile[anz-1] = 0; } ...
-
ich beschreibs mal kurz:
ich muss ein Projekt über Sortieralgorithmen machen (heap sort, insertion sort, ....) dabei muss ich die Daten aus ner Dateilesen die über die kommandozeile übergeben werden (wenn nicht in dem Programm). Wenn ich die Daten der Datei nun in das Feldgelesen habe, kann ich nun diese Feld direkt einem sortier- algorythmus übergeben!??!
-
max_88 schrieb:
Wenn ich die Daten der Datei nun in das Feldgelesen habe, kann ich nun diese Feld direkt einem sortier- algorythmus übergeben!??!
Das kommt darauf an, wie du das Feld (ich vermute mal Array) aufgebaut hast und welche Funktion(en) du als Sortier-Algorithmus verwendest.
-
also, ich nehme zb. insertion sort her... (algorithmus siehe pronix.de, einfach in die suche). Ich habe das Feld herausgelesen aus einer Datei:
datei xxx.txt
12
4
77
2Ich hab sie nun herausgelesen, dabei aber auch die Zeilenumbrüche mit... funktioniert das so, oder muss ich die Zeilenumbrüche erst wegbekommen!?
-
hallo?? keiner da der mir weiterhilft?!?
-
nochetwas, habe probiert die ienzelnen zeichenfolgen mit einem printf herauszulsen:#
for(a=0;a<=grosse;a++){ printf("%s",zeichenfeld[a]); getch(); }
dabei wird mir mit jeder taste aber nur genau 1 zeichen ausgegeben, aber ich dachte ich hätte jede zeichenfolge(zb: 234 in einer Zeile) in das Feld zeichenfeldgespeichert, sodass ich durch : zeichenfeld[1] auf 234 zugreifen kann, und ich mit dem arbeiten kann!
bitte helft mir...
-
max_88 schrieb:
[C++ Error] machz.cpp(126): E2285 Could not find a match for 'sscanf(undefined,char *,char)'.
printf("\n%d",z1); zeichenfeld=(char) malloc(z1*sizeof(char)); }
ich verzweifle langsam, hab schon wirklich alles mir bekannte ausprobiert, kann mirjemand eine Problemlösung vorschlagen!??!!?!??!!?!?
ich hoffe ich kann auf euch zählen!
kein Wunder, die benutzung von malloc ist zum Heulen. malloc liefert ein void* zuück, in C braucht man nicht zu casten, aber da du ja C++ benutzt (und trotzdem malloc benutzt, wo es new gibt), solltest du mit (char*) casten. sizeof(char) ist 1, also überflüssig. Außerdem überprüfst du nicht, ob malloc NULL zurückgeliefert hat.
-
das habe ich schon, nur nicht hier im angeführten prog. Troztdem wäre mir eine antwort auf die von mit vorher gestellte antwort sehr lieb!
-
ich weiß ich bin läsigt
, aber ich muss nächste woche mein projekt zum Thema Sortieragorithemn abgeben, und davon hängt ne menge ab. Ich habe schon alles von mir wissende probiert, aber es hilft nichts, ich weiß dass man das nicht machen sollte, aber ich bitte euch draum mir eine lösung vorzuschlagen, sodass man werte (zahlen und buchstaben) aus einer Datei liest, diese in ein Feld speichert, wenn es geht ohne die zeilenumbrüche, dynamisch dafür speicher allokiert und dann damit arbeiten kann, dass wenn ich zb. das sortierverfahren insertionsort habe ich mit dem entstandenen Feld arbeiten kann:
**
bsp: textdatei.txt12 (soll gliech feld[0] sein)
133 (soll gleich feld[1] sein) ....
12
8
9
**ich weiß es ist nicht in ordnung das ich hier darum bitte das ihr mir in diesen ausmaß helft, aber ich weiß sonst nichts mehr!Ich hoffe ihr könnt mir helfen!
mfg. max_88
-
?!?!?!