Cách đọc file CSV trong ngôn ngữ C
Tình hình là em có bài tập có liên quan tới file CSV cần đọc sau đó thêm vào template rồi xuất ra file html, encode Unicode UTF-8 nữa nên hơi rắc rối. Hiện tại e đang test thử đọc file CSV, có tham khảo một số trang nước ngoài nhưng vẫn chưa thành công, mọi người có thể giúp mình được không?
Trong file CSV:
“1412222”,“Nguyễn Văn A","nva@gmail.com”,“CÔNG NGHỆ THÔNG TIN”,“2014”,“12/01/1996”,“1412547.jpg”,“Một kẻ điên rồ!!!”,“Linkin Park, Jason Mraz,…”,“Breaking Bad, Daredevil, Harry Potter,…”
Phần sở thích có nhiều sở thích.
Code em thế này ạ.
struct Student{
char *MSSV;
char *HoTen;
char *Khoa;
int KHoc;
char *NgaySinh;
char *HACN;
char *MTBT;
char **SoThich;
};
struct Student Students[256];
/* PROTOTYPE OF FUNCTIONS */
int readStudentFile();
int main(int argc, char **argv)
{
readStudentFile();
system("pause");
return 0;
}
int readStudentFile()
{
FILE *StudentFile;
char *buf = new char[256];
char *tmp;
//Lỗi nếu không cấp phát được bộ nhớ cho buf
if (buf == NULL) {
printf ("No memory
");
return 1;
}
if ( ( StudentFile = fopen( "Test.csv", "r" ) ) == NULL ) //Đọc file
{
printf( "File could not be opened.
" );
}
int i = 0;
int j=0;
int flag=0;
while (fgets(buf, 255, StudentFile) != NULL)
{
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '
'))
buf[strlen (buf) - 1] = ' ';
tmp = strtok(NULL, ",");
Students[i].MSSV = tmp;
tmp = strtok(NULL, ",");
Students[i].HoTen = tmp;
tmp = strtok(NULL, ",");
Students[i].Khoa = tmp;
tmp = strtok(buf, ",");
Students[i].KHoc = atoi(tmp);
tmp = strtok(NULL, ",");
Students[i].NgaySinh = tmp;
tmp = strtok(NULL, ",");
Students[i].HACN = tmp;
tmp = strtok(NULL, ",");
for(j;strcpy(tmp,' ')!=0;j++)
{
Students[i].SoThich[j] = tmp;
}
//tempStudent.ID = atoi(buf);
i++;
flag=-1;
}
//free(buf);
fclose(StudentFile);
if(flag==-1)
for (i = 0; i <= sizeof(Students); i++)
{
if (Students[i].MSSV != 0)
printf("MSSV: %s
",Students[i].MSSV);
printf("Ho ten: %s
", Students[i].HoTen);
printf("Khoa: %s
", Students[i].Khoa);
printf("Khoa' hoc: %d
", Students[i].KHoc);
printf("Ngay sinh: %s
", Students[i].NgaySinh);
for(int k=0;k<j;k++)
printf("So thich: %s
", Students[i].SoThich);
}
return 0;
}