Supportnet Computer
Planet of Tech

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:


#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?

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: