2012-12-22 29 views
5

में लाइन के अंत तक फ़ाइल से डेटा पढ़ना फ़ाइल के अंत तक पढ़ना आम है, लेकिन मुझे दिलचस्पी है कि मैं टेक्स्ट फ़ाइल से डेटा (संख्याओं की एक श्रृंखला) को कैसे पढ़ सकता हूं लाइन? मुझे एक फाइल से कई संख्याओं की संख्या पढ़ने का काम मिला, जो नई लाइनों में स्थित हैं।सी/सी ++

1 2 53 7 27 8 
67 5 2 
1 56 9 100 2 3 13 101 78 

प्रथम श्रृंखला: 1 2 53 7 27 8

दूसरा एक: 67 5 2

तीसरा एक: 1 56 9 100 2 3 13 101 78

यहाँ इनपुट का एक उदाहरण है

मुझे उन्हें फ़ाइल से अलग से पढ़ना है, लेकिन प्रत्येक लाइन के अंत तक। मेरे पास यह कोड है:

#include <stdio.h> 
    FILE *fp; 
    const char EOL = '\\0'; 
    void main() 
    { 
     fp = fopen("26.txt", "r"); 
     char buffer[128]; 
     int a[100]; 
     int i = 0; 
     freopen("26.txt","r",stdin); 
     while(scanf("%d",&a[i])==1 && buffer[i] != EOL) 
      i++; 
     int n = i; 
     fclose(stdin); 
    } 

यह फ़ाइल के अंत तक पढ़ता है, इसलिए यह काफी कुछ नहीं करता जो मैं अपेक्षा करता हूं। आपकी क्या सलाह है?

+0

फ्रीपेन का उपयोग करने और stdin से पढ़ने के लिए कोई विशिष्ट कारण? –

उत्तर

5

उपयोग fgets() पूरी लाइन को पढ़ने के लिए है, तो लाइन (संभवतः strtol() के साथ) पार्स।

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char buffer[10000]; 
    char *pbuff; 
    int value; 

    while (1) { 
    if (!fgets(buffer, sizeof buffer, stdin)) break; 
    printf("Line contains"); 
    pbuff = buffer; 
    while (1) { 
     if (*pbuff == '\n') break; 
     value = strtol(pbuff, &pbuff, 10); 
     printf(" %d", value); 
    } 
    printf("\n"); 
    } 
    return 0; 
} 

आप code running at ideone देख सकते हैं।

+1

यदि आप इस विचार का उपयोग करने जा रहे हैं, तो सुनिश्चित करें कि आप अजीब इनपुट से निपटने के लिए कोड जोड़ते हैं (खराब डेटा वाली फाइलें (अतिरिक्त लंबी लाइनों सहित), खाली रेखाएं, पिछली जगहों वाली रेखाएं, खाली फ़ाइलें, ... .. ।) – pmg

2

\ N नई लाइन के लिए भागने होना चाहिए, कोशिश यह बजाय

const char EOL = '\n'; 

था यू यह काम कर रहा है? इस की मदद करनी चाहिए:

#include <stdio.h> 
FILE *fp; 
const char EOL = '\n'; // unused . . . 

void main() 
{ 
    fp = fopen("26.txt", "r"); 
    char buffer[128]; 
    int a[100]; 
    int i = 0; 
    freopen("26.txt","r",stdin); 

    while(scanf("%i",&a[i])==1 && buffer[i] != EOF) 
     ++i; 

    //print values parsed to int array.  
    for(int j=0; j<i; ++j) 
     printf("[%i]: %i\n",j,a[j]); 

    fclose(stdin); 
} 
संबंधित मुद्दे