ibilalkayy Ответов: 2

Как читать данные двух файлов одновременно?


#include <stdio.h>
#include <string.h>
#define MAXC 1024    
#define MAXDT  16

int main (int argc, char **argv) {
    char datestr[MAXDT]; 
    unsigned dateval;
    char buf[MAXC];  
    
    FILE * fp = fopen("file.csv", "r");
    if (!fp) { 
        perror ("file open failed");
        return 1;
    }
    
    while (fgets (buf, MAXC, fp)) {   
        unsigned mo, day, yr;    
        char *p = strrchr (buf, ','), tmpstr[MAXDT] = "";
        unsigned tmpu = 0;      
        
        if (!p)      
          continue;
        
        if(sscanf(p + 1, "%u-%u-%4u", &day, &mo, &yr)!= 3)
            continue;
       
        sprintf(tmpstr, "%04u%02u%02u", yr, mo, day); 
        
        if(sscanf(tmpstr, "%u", &tmpu) != 1) 
            continue;
        
        if(tmpu > dateval){   
            dateval = tmpu;     
            strcpy(datestr, p + 1);
            datestr[strcspn (datestr, "\n")] = 0;  
        }
    }
    if (fp != stdin)   
        fclose (fp);
    
    printf ("last date in file: %s\n", datestr); 
}


Что я уже пробовал:

В этом коде я получаю данные файла и печатаю из него последнюю дату. Что делать, если есть два файла, и я хочу прочитать оба файла одновременно? Придется ли мне использовать fgets() читать и повторять весь код снова или есть какой-то короткий метод, который заключается в том, чтобы читать оба файла и печатать их данные одновременно?

KarstenK

вы должны организовать свой код с помощью функций и структур, чтобы вы могли читать и получать доступ к данным из обоих файлов. Эти операции выполняются в миллисекундном интервале времени.

2 Ответов

Рейтинг:
2

OriginalGriff

На самом деле в C невозможно читать два файла одновременно, по крайней мере без большого количества ошибок, поскольку он не имеет встроенной поддержки нескольких потоков - хотя библиотеки потоков обычно доступны для большинства операционных систем, они могут быть совместимы или не совместимы с вашей версией C (сейчас это очень старый язык)

Лучшее, что вы можете сделать, это прочитать строку из одного, строку из другого, а затем обработать оба, как если бы они были прочитаны одновременно, и цикл для обработки всех строк в обоих файлах. Что потребует некоторых усилий, так как вам придется справиться с одним файлом, "выбегающим" раньше, чем это сделает другой.

Я не говорю, что это невозможно сделать, просто вам нужно долго и упорно думать о том, что именно содержит ваш файл и как вам нужно обработать эти два файла, прежде чем вы начнете прыгать на код: возможно, было бы лучше прочитать и предварительно обработать каждый файл перед любыми операциями "комбинированных данных", чтобы получить из него что-то полезное. Но это будет зависеть от данных и того, что именно вы хотите с ними сделать, а мы об этом понятия не имеем!


Рейтинг:
1

Patrice T

Цитата:
Как читать данные двух файлов одновременно?

Довольно простой:
// Open fist file
FILE * fp_first = fopen("file1.csv", "r");
// open second file
FILE * fp_second = fopen("file2.csv", "r");

// read first file
fgets (buf, MAXC, fp_first);
// read second file
fgets (buf, MAXC, fp_second);