Supportnet / Forum / Anwendungen(Java,C++...)
integer aus datei einlesen
Frage
Hallo,
ich bins mal wieder. Es hat sich ein neuerliches Problem aufgetan. Ich muss aus einer Text-Datei unter anderem Integer-Werte einlesen. Dabei kann es auch vorkommen, das Integer mit einer 0 beginnen, z.B.: 03597. Mein fscanf("%i",&i) liest das Ding aber nur als 3597 ein, ist ja auch verständlich. Ich muss aber unbedingt wissen, ob da eine Null stand oder nicht! Wie kann ich das Problem am Besten lösen?! Eine Lösung wäre den Integer als String einzulesen, aber wie geht das?
Danke für eure Hilfe
Antwort 1 von asok
>Mein fscanf("%i",&i) liest das Ding
>aber nur als 3597 ein, ist ja auch
>verständlich.
Das ist für mich nicht verständlich, es sei denn du arbeitest nicht mit einer Intel-Maschine. Wie auch immer: Ich schlage vor, den Text als String zu lesen, und dann umzuwandeln. Etwa so:
Ob du den Text so einlesen kannst wie im Beispiel hängt vom Format deiner Datei ab.
>aber nur als 3597 ein, ist ja auch
>verständlich.
Das ist für mich nicht verständlich, es sei denn du arbeitest nicht mit einer Intel-Maschine. Wie auch immer: Ich schlage vor, den Text als String zu lesen, und dann umzuwandeln. Etwa so:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
FILE * fptr;
char buffer[10] = {0};
if(fptr = fopen("test.dat", "r")) {
if(fgets(buffer, 10, fptr)) {
n = atoi(buffer);
printf(" txt: %s int: %i\n", buffer, n);
}
fclose(fptr);
}
return 0;
}
Ob du den Text so einlesen kannst wie im Beispiel hängt vom Format deiner Datei ab.
Antwort 2 von Omicron
Das ist leider nicht so einfach, hier mal ein kleiner Auszug aus der Datei:
10 731.547 524.624 745.145 1252
20 732.550 529.634 643.185 02510
30 732.550 529.634 643.185 225200
40 731.547 524.624 745.145 705
So in der Art und noch 1000 Zeilen mehr. Und der letzte Integer ist der besagte. Die 5 ist ein Trennzeichen und ist immer an 3. Stelle, aber die Anzahl der Ziffern nach der 5 ist variabel. Ich brauch nen Algorithmus der mir diese Integerzahl in den Wert vor der 5 und den Wert nach der 5 teilt und in 2 Variablen speichert. Dummerweise greift mein Billig-Algorithmus nicht mehr, wenn eine Null davorsteht, weil dann die 5 an 2. Stelle rutscht. Hat jemand noch ne Idee?
10 731.547 524.624 745.145 1252
20 732.550 529.634 643.185 02510
30 732.550 529.634 643.185 225200
40 731.547 524.624 745.145 705
So in der Art und noch 1000 Zeilen mehr. Und der letzte Integer ist der besagte. Die 5 ist ein Trennzeichen und ist immer an 3. Stelle, aber die Anzahl der Ziffern nach der 5 ist variabel. Ich brauch nen Algorithmus der mir diese Integerzahl in den Wert vor der 5 und den Wert nach der 5 teilt und in 2 Variablen speichert. Dummerweise greift mein Billig-Algorithmus nicht mehr, wenn eine Null davorsteht, weil dann die 5 an 2. Stelle rutscht. Hat jemand noch ne Idee?
Antwort 3 von hendrikw
Falls Du keine Tokenizer-Klasse zu Hand hast, kannst Du strtok() verwenden, um eine eingelesene Zeile in Teilstrings zu zerlegen. So bekommst Du die Zahl als String mit 0 vorn dran.
Den musst Du dann nur noch zerlegen.
mfg
Hendrik
Den musst Du dann nur noch zerlegen.
mfg
Hendrik
Antwort 4 von asok
Das Zerlegen des Strings übernimmt fscanf() für dich. Du musst dann nur noch - wie Hendrik schon sagte - den letzten String zerlegen und umwandeln lassen. Das Programm hier funktioniert mit deiner Beispieldatei:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fptr;
char buffer[10];
int n1, res, value_1, value_2;
float f1 = .0, f2 = .0, f3 = .0;
if(fptr = fopen("test.dat", "r")) {
do {
res = fscanf(fptr, "%i %f %f %f %s", &n1, &f1, &f2, &f3, buffer);
if(EOF == res)
break;
*(buffer + 2) = '\0';
value_1 = atoi(buffer);
value_2 = atoi(buffer+3);
printf("Wert 1: %i, Wert 2: %i\n", value_1, value_2);
}
while(1);
fclose(fptr);
}
return 0;
}
Antwort 5 von Omicron
Danke Leute jetzt funktionierts. Prima... also nochmal danke an alle
MfG Omicron
MfG Omicron

