c Datei einlesen und Daten verarbeiten

newbie89

Mitglied
Hi,

ich möchte eine datei einlesen die so aus sieht:

5
10
15
20
25
30
.... das bis 100

und zwar möchte ich die zeile für zeile einlesen und dann pro zeile die eingelesene zahl mit einer variable vergleichen.
nehm ich da am besten eine for schleife z.b. so
Code:
FILE*fp;
 int daten[100];
 int i;
 float min;

fp= fopen ("C:\\ProgramFiles\\cpp\\Katalog1.txt","a+");
   if (fp==NULL)
               printf("Fehler beim Oeffnen.\n");
       else
               printf("Datei erfolgreich eingelesen.\n");
                     
               
                                                               /* while (fgets(daten, sizeof(daten),fp) !=0)
                                                             fputs (daten,stdout);
                                                           min='C'-'daten[]';
                                                            printf("%f",min);*/
         
   for (i=0;i<=(sizeof(daten));i++)
   {
       fscanf("%i", &daten[i]) ;                       
                             
   }

oder wie gehe ich da am besten vor ...
 
C++:
#include <stdio.h>

int main() 
{
  FILE* ptr_file = fopen("fscanf.txt", "r");

  if (!ptr_file) 
  {
    printf("Error: can't open file.\n");
    return 1;
  }
  printf("File opened successfully.\n");

  int temp = -1;
  while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
      fscanf(ptr_file, "%d", &temp);
  printf(temp == 20 ? "Number found!" : "Number not found!");

  fclose(ptr_file);
  return 0;
}
 
C++:
#include <stdio.h>

int main() 
{
  FILE* ptr_file = fopen("fscanf.txt", "r");

  if (!ptr_file) 
  {
    printf("Error: can't open file.\n");
    return 1;
  }
  printf("File opened successfully.\n");

  int temp = -1;
  while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
      fscanf(ptr_file, "%d", &temp);
  printf(temp == 20 ? "Number found!" : "Number not found!");

  fclose(ptr_file);
  return 0;
}

Problem das ich eigentlich hauptsächlich hatte war das ich nicht zeilenwert um zeilenwert mit der variable vergleichen kann... kann man vielleicht noch ein paar erklärende sätze dazuschreiben. Danke
 
C++:
#include <stdio.h>
 
int main()
{
  // Datei "fscanf.txt" öffnen, "r" heißt nur lesen.
  FILE* ptr_file = fopen("fscanf.txt", "r");
 
  if (!ptr_file)
  {
    // Die Datei existiert nicht - abbrechen!
    printf("Error: can't open file.\n");
    return 1;
  }
  printf("File opened successfully.\n");
 
  // Temporäre Integer-Variable, die zum Einlesen der Zahlen verwendet wird.
  int temp = -1;
  // Solange temp ungleich 20 (oder einer anderen variablen Zahl) ist, suchen wir
  // weiter, undzwar solange, bis das Dateiende erreicht ist (!feof(ptr_file)).
  while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
      // Eine Zahl aus der Datei einlesen, wird in temp gespeichert
      fscanf(ptr_file, "%d", &temp);

  // Wenn temp gleich 20 (oder einer anderen variablen Zahl) ist, wurde die gesuchte
  // Zahl gefunden, andernfalls nicht.
  printf(temp == 20 ? "Number found!" : "Number not found!");
 
  // Datei schließen
  fclose(ptr_file);

  return 0;
}
 
kann ich anstatt einer fixen zahl wie etwa die 20 hier nicht irgendwas anderes benutzen denn wenn sich die liste nun verändert aber der code gleich bleibt hab ich ein problem.

und wie sieht das jetzt mit dem vergleich aus ich kapier nicht ganz wie ich zeile um zeile mit meinem zu vor errechneten wert vergleichen kann das versteh ich einfach hier noch nicht...
 
kann ich anstatt einer fixen zahl wie etwa die 20 hier nicht irgendwas anderes benutzen denn wenn sich die liste nun verändert aber der code gleich bleibt hab ich ein problem.
Nimm einfach statt der '20' die Variable mit dem von Dir berechneten Wert ! !

und wie sieht das jetzt mit dem vergleich aus ich kapier nicht ganz wie ich zeile um zeile mit meinem zu vor errechneten wert vergleichen kann das versteh ich einfach hier noch nicht...
Was genau verstehst Du daran nicht :confused:
Es werden zeilenweise die Werte aus der Datei nach 'temp' eingelesen und dann jeweils mit dem gewünschten Vergleichswert (hier fix '20' oder eben die Variable) verglichen .....

Gruß
Klaus
 
ok, vielleicht ist die While-Schleife so besser und verständlicher:

Java:
int iValue = 20;  // der gesuchte Wert

while( !feof(ptr_file) )
{
    // Eine Zahl aus der Datei einlesen, wird in temp gespeichert
    fscanf(ptr_file, "%d", &temp);
 
    // Wenn temp gleich der gesuchten Zahl ist
    if( temp == iValue )
    {
        printf( "Number found !" );
        break;  // Schleifenabbruch
    }
    else
    {
        printf( "Number not found !" ); // Weitersuchen!!
    }
} // while

Gruß
Klaus
 
mh ok werd ich gleich mal probieren...

wie siehts mit der variante aus kann man das hierdraus auch noch weiterbauen

while (fgets(daten, sizeof(daten),fp) !=0)
 
mhh das ist nicht das was ich suche ich möchte zeile für zeile mit meiner variable vergleichen und dann in jeder schleife praktisch den abstand zwischen dateiwert und variable ermitteln und wenn die datei ferrtig durchsucht ist will ich haben das der wert mit der geringsten differenz aus meiner datei ausgegeben wird.... eine zahl aus einer datei suchen ist was anderes oder steh ich jetzt völlig aufm schlauch
 
Zurück