Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Txt Datei einlesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.05.2006, 17:51 Uhr
~Theresa
Gast


Hallo zusammen, habe folgendes Problem: Ich soll aus einer txt Datei im Format:

!xxxxxxxxxxxxxxxx

22.3 !xxxxxxxxxx
22 !xxxxxxxxxx
0.5 !xxxxxxxxxx

aus der ich nur die Zahlenwerte in mein C Programm lesen möchte. Bisher habe ich folgendes:


C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX1 50
#define ZEILENLAENGE 80


void main()
{
int resultat, i=0;
FILE*fi;
char datenfile[]= "C:\\fahrzeugdatenfile.txt";
char zeile[ZEILENLAENGE];
char input[ZEILENLAENGE], buffer[MAX1][MAX1],help[MAX1];

fi = fopen(datenfile,"r");
if (fi == NULL)
    printf("\n no input file found, please check datenfile \n\n");
while(!feof(fi))
{
    i++;
    fgets(zeile, ZEILENLAENGE, fi);
    resultat = sscanf(zeile, "%s %lf ", &input);
    switch (zeile[0])
        {
        case '!': fgets(zeile, ZEILENLAENGE, fi) == "\n"; i-=1; continue;
        case '*': fgets(zeile, ZEILENLAENGE, fi) == "\n"; i-=1; continue;
        case '#': fgets(zeile, ZEILENLAENGE, fi) == "\n"; i-=1; continue;
        case '%': fgets(zeile, ZEILENLAENGE, fi) == "\n"; i-=1; continue;
        case ' ': fgets(zeile, ZEILENLAENGE, fi) == "\n"; i-=1; continue;
        }
      
    strcpy(help, input);
    printf("\n\n\ input innerhalb for-Schleife= %s i = %d",input, i);
    printf("\n\n\ zeile innerhalb for-Schleife= %s ",zeile);
    printf("\n\n\ help innerhalb for-Schleife= %s ",help);
}
printf("\n\n\ input nach for-Schleife =  ",input);
printf("\n\n\ help nach for-Schleife= %s ",help);
}



Ich kann jetzt die Zeilen nach meinen Wünschen auslesen. Ich bekomme es einfach nicht hin innherhalb der while-Schleife mir meine DAten aus dem Einlesefile in einen Array zu speichern, den ich auch noch im Hauptprogramm ansprechen kann. Die Hilfsvariable i habe ich mir angelegt um nachher meine Daten entsprechend im Array ablegen zu können.

Ach ja nochwas: Nach der try&error Methode bin ich bei der switch-case Anweisung vorgegangen, ist der entsprechende case = 1 möchte ich dem fgets Befehl mitteilen dass er in die nächste ZEile springen soll mit fgets(...) == "\n", das funktioniert auch nur bringt er mir eine Warnmeldung ob ich statt "==" nicht "=" meine, ersetze ich "==" durch "=" kommt eine Fehlermeldung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.05.2006, 20:57 Uhr
ao

(Operator)


Hi Theresa,

so müsste es eigentlich einfacher gehen:


C++:
double input;
resultat = sscanf(zeile, "%lf ", &input);
if (resultat > 0)
{
    /* erfolgreich umgewandelt, Zahlenwert steht in input */
}
else
{
    /* Kein Zahlenwert gefunden */
}


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.05.2006, 21:08 Uhr
~Theresa
Gast


Hallo,

danke für deine Antwort, wenn ich dein Posting richtig verstehe liest es mir nur die Zeilen ein, ich möchte aber, dass er Zeilen die mit "!" beginnen oder Leerzeilen sind herausfiltert, und dass er mir die Zahlenwerte in irgendeiner Form speichert die ich außerhalb der Schleife problemlos ansprechen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.05.2006, 22:39 Uhr
ao

(Operator)


Ach so, noch mal im Ganzen:


C++:
while(!feof(fi))
{
    fgets(zeile, ZEILENLAENGE, fi);
    double input;
    resultat = sscanf(zeile, "%lf ", &input);
    if (resultat > 0)
    {
        /* erfolgreich umgewandelt, Zahlenwert steht in input */
    }
    else
    {
        /* Kein Zahlenwert gefunden */
    }  
}


Die Rückgabe von sscanf ist die Anzahl der erfolgreich konvertierten Objekte, in deinem Fall also entweder 1 (eine Fließkommazahl erkannt und in input abgelegt) oder 0 (keine Fließkommazahl erkannt).

In jedem Schleifendurchlauf, bei dem resultat == 1 ist, kannst du einen neuen Wert in input abholen und irgendwo einsortieren.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.05.2006, 09:25 Uhr
~Theresa
Gast


Super, ich bedanke mich!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: