Как читать блоки чисел из текстового файла в C - PullRequest
0 голосов
/ 11 марта 2011

У меня есть файл numbers.dat, содержащий около 300 чисел (с плавающей запятой, отрицательный положительный) в формате столбца. Цель состоит в том, чтобы сначала заполнить numbers.dat 300 числами, а затем каждый раз извлекать 100 чисел в другой файл, например n1.dat. Второй файл n2.dat будет иметь следующие 100 чисел из numbers.dat и т. Д. Для 3 подмножеств файлов, полученных из number.dat. Я не могу понять, как учитывается местоположение последнего прочитанного сотого числа, чтобы чтение и выборка файла для следующего блока происходили после извлечения предыдущего числа.

Опробование решения, предоставленного Gunner:

FILE *fp = fopen("numbers.dat","r"); 
FILE *outFile1,*outFile2,*outFile3; 
int index=100; 

char anum[100]; 
while( fscanf(fp,"%s",anum) == 1 ) 
    {
 if(index==100)
     {
// select proper output file based on index.
 fprintf(outFile1,"%s",anum);
     index++; }
     if(index >101)
     {
        fprintf(outFile2,"%s",anum);
     index++; }
}

Проблема только в том, что записываются данные. Каким должен быть правильный процесс?

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Я бы написал программу для этого как

read data from input file line-by-line
keep a line count
based on the current line count copy the line to a specific output file

примерно так

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

#define INPUTFILENAME "numbers.dat"
#define MAXLINELEN 1000
#define NFILES 3
#define LINESPERFILE 100
#define OUTPUTFILENAMETEMPLATE "n%d.dat" /* n1.dat, n2.dat, ... */

int main(void) {
    FILE *in, *out = NULL;
    char line[MAXLINELEN];
    int linecount = 0;

    in = fopen(INPUTFILENAME, "r");
    if (!in) { perror("open input file"); exit(EXIT_FAILURE); }
    do {
        if (fgets(line, sizeof line, in)) {
            if (linecount % LINESPERFILE == 0) {
                char outname[100];
                if (out) fclose(out);
                sprintf(outname, OUTPUTFILENAMETEMPLATE, 1 + linecount / LINESPERFILE);
                out = fopen(outname, "w");
                if (!out) { perror("create output file"); exit(EXIT_FAILURE); }
            }
            fputs(line, out);
            linecount++;
        } else break;
    } while (linecount < NFILES * LINESPERFILE);
    fclose(in);
    if (out) fclose(out);
    return 0;
}
1 голос
/ 11 марта 2011

Продолжить чтение из number.dat и запись в соответствующий выходной файл на основе индекса текущего прочитанного числа.

Пример кода.

FILE *fp = fopen("numbers.dat","r");
FILE *outFile;
int index=0;
char anum[100]; // since we are not calculating, we can store numbers as string
while( fscanf(fp,"%s",anum) == 1 )
{
// select proper output file based on index.
fprintf(outFile,"%s",anum); 
index++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...