Pliki csv to pliki tekstowe służące do zapisywania w skondensowanej postaci tabelek: każda linijka składa się z pól rozdzielonych umownym znakiem (tzw. separatorem, najczęściej jest to , lub ;) i odpowiada pojedynczemu wierszowi tabelki, kolejne pola odpowiadają kolejnym kolumnom tabelki.
Napisz prosty program wizualizujący pliki tego typu. Oczekiwana funkcjonalność:
użytkownik podaje nazwę pliku oraz pojedynczy znak (separator)
program otwiera wskazany plik do czytania i ustala maksymalną liczbę pól w linijce(=liczba kolumn) oraz maksymalną długość pola w każdej kolumnie
przepisuje zawartość pliku do nowego nowego pliku, ustawiając pola w kolumnach szerokości dopasowanej do aktualnych danych, kolumny powinny być rozdzielone znakiem |.
Przykład małego pliku csv i odpowiadającego mu rezultatu w załączeniu (uwaga: aby zobaczyć jak wygląda plik csv jako plik tekstowy, należy otworzyć go w edytorze tekstu np Notepad++, system Windows zapewne zaproponuje arkusz kalkulacyjny - zadanie polega na zapisaniu w C tego, co robi arkusz kalkujacyjny, otwierając plik csv).
Dla ułatwienia możesz przyjąć, że maksymalna długość linii w zadanym pliku to 1000 znaków (chodzi o znaki użytkowe, a więc bez znaku końca linii itp).
**Na razie nie wczytuje nic od użytkownika, ale mam problem, bo nie wiem, czy muszę zrobić to łopatologicznie, wczytując cały plik i określając liczę długość każdego słowa, czy istnieje jakiś szybszy sposób? **
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int main(void) {
FILE *reading;
FILE *save;
char bufor[MAXLINE];
char corrector[]=";";
char *word;
reading = fopen("ex-5.csv", "r");
save = fopen("wynik.txt", "w");
if (!reading) {
printf("!brak pliku!");
fclose(save);
fclose(reading);
return 0;
}
while (fgets(bufor, MAXLINE, reading)) {
word = strtok(bufor, corrector);
fprintf(save, "%c", '|');
while (word) {
fprintf(save, "%s", word);
word = strtok(NULL, corrector);
fprintf(save, "%c", '|');
}
fprintf(save, "\n");
}
fclose(reading);
fclose(save);
return 0;
}