2017-02-12 16 views
-3

Ich habe Daten in einer Textdatei im FormatWerte aus einer Textdatei lesen?

WA5362288SeaTac city   25496 10176  434224 9.964121 0.167655 47.441406-122.293077 
WA5363000Seattle city  563374 270524 151956998 83.872647 58.670927 47.626353-122.333144 

Jetzt versuche ich bestimmte Werte aus den obigen Daten zu extrahieren (das einige padding Leerzeichen entfernt hatte), zum Beispiel

WA SeaTAC 47.441406 -122.293077 

ich bin nicht sicher, wie Werte von bestimmten Spalten in C zu erhalten, während Streaming über eine Textdatei

FILE *fp; 
    fp = fopen("places.txt", "r"); 

    if(fp == NULL){ 
      fprintf(stderr, "Can't open the file"); 
      exit(1); 
    } 

    while(!feof(fp)){ 
     //extract values from specific column 
     //fscanf() 
    } 
+0

Dies ist gut dokumentiert und hat unzählige Antworten hier auf SO und über das Internet. Gibt es etwas Spezifisches, mit dem du Probleme hast? –

+0

Schritt 1: Lies ['while (! Feof (datei))' ist immer falsch] (http://stackoverflow.com/questions/5431941/while-feof-file-isal-ways-wrong) und repariere deinen Regelkreis . Schritt 2: Verwenden Sie ['fgets()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html) oder die POSIX-Funktion ['getline()'] (http: //pubs.opengroup .org/onlinepubs/9699919799/functions/getline.html) Zeilen lesen und dann vielleicht ['sscanf()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html) verwenden analysiere die Zeilen. –

+0

Spezifischer bitte. Ihr Datenextrakt ist verwirrend. Suchen Sie nur nach der ersten Spalte ohne Nummer und den letzten zwei Spalten? – texasbruce

Antwort

3

ich Ihre Datei übernommen haben enthält th Folgendes:

WA 5362288 SeaTac city   25496 10176  434224 9.964121 0.167655 47.441406 -122.293077 
WA 5363000 Seattle city  563374 270524 151956998 83.872647 58.670927 47.626353 -122.333144 

Der Dateiname lautet simple.txt. Dann wird der folgende Code entspricht Ihren Zweck:

#include <stdio.h> 

FILE *fp; 

int main() 
{ 
    char buff1[80],buff2[80]; 
    char buff3[80]; 
    int num,num1,num2,num3 ; 
    float num4,num5,num6,num7; 
    fp = fopen("simple.txt", "r"); 
    if(fp == NULL){ 
      fprintf(stderr, "Can't open the file"); 
      exit(1); 
    } 
    while(fscanf(fp, "%19s %d %19s %19s %d %d %D %f %f %f %f ", buff1,&num,buff2,buff3,&num1,&num2,&num3,&num4,&num5,&num6,&num7)!= EOF) 
     printf("%s %d %s %s %d %d %d %f %f %f %f \n",buff1,num,buff2,buff3,num1,num2,num3 ,num4,num5,num6,num7); 


    fclose(fp); 
} 

Dieser Code druckt den Inhalt der Datei wie folgt:

WA 5362288 SeaTac city 25496 10176 434224 9.964121 0.167655 47.441406 -122.293076 
WA 5363000 Seattle city 563374 270524 151956998 83.872650 58.670925 47.626354 -122.333145 

Hoffnung, das hilft.

+0

Nur ein Vorschlag, Sie könnten auch 'while (fscanf (........) == 11)' alles in einer Zeile verwenden. – RoadRunner