當前位置:首頁 » 編程語言 » c語言讀寫csv
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言讀寫csv

發布時間: 2023-04-07 07:32:23

① 關於c語言讀CSV文件的問題

csv文件即逗號分隔值文件。

逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。

純文本意味著該文件是一個字元序列,不含必須像二進制數字那樣被解讀的數據。

CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由欄位組成,欄位間的分隔符是其它字元或字元串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的欄位序列。

要用C語言讀取CSV,首先需要確定文件中定義的字元分隔值,以及每一行各個列的元素格式。

如果所有的元素格式相同,那麼可以每行一個一維數組,所有行組成一個二維數組,逐個元素進行讀取。

如果元素格式不同,可以按照元素類型,構建一個結構體,每行讀到一個結構體變數中,所有行組成一個結構體數組。

下面根據兩種情況,按照分隔符為逗號(,),分別舉一個例子:

文件名設定為in.csv,每行10個元素。

一、所有元素均相同類型,比如int型。

#include<stdio.h>
intmain()
{
FILE*fp;
inta[100][10];//定義一個足夠大的數組來存儲。
intline=0;
intc,i;

fp=fopen("in.csv","r");//以文本方式打開。
if(fp==NULL)return-1;//打開文件失敗。
while(1)
{
i=0;//列標記清零。
while(1)
{
fscanf(fp,"%d",&a[line][i]);//從文件禪亂中讀取一個元素。
c=getchar();//讀取下一個字元,可能是分隔符,換行符或文件結尾。
if(c==' '||c==EOF)break;//讀完一行,或者到文件結尾,退出讀取。
i++;
}
line++;
if(c==EOF)break;
}

fclose(fp);//關閉文件。
//以下循環用來列印所有讀到的值。
for(i=0;i<line;i++)
{
for(c=0;c<10;c++)
printf("%d",a[i][c]);
printf(" ");
}
}

二、每行元素不同。

比如共三列,第一列是int型,第二列是字元串,第三列是float型。

如果分隔符不是空白字元,或者字元串元素中可能存在除分隔符外的其它空白字元,在讀取搏襲御字元串的時候是不能用fscanf函數的。

定義結構體如下

strcutdata
{
inta;
chars[100];//根據實際要求,定義足夠大的字元數組。
floatf;
};

讀取代碼如下:

#include<stdio.h>
intmain()
{
FILE*fp;
strcutdataa[100];//定義基岩一個足夠大的結構體一維數組來存儲。
intline=0;
intc,i;

fp=fopen("in.csv","r");//以文本方式打開。
if(fp==NULL)return-1;//打開文件失敗。
while(1)
{
fscanf(fp,"%d",&a[line].a);//從文件中讀取第一個元素。
c=getchar();//讀取分隔符。
//接下來要讀取字元串,需要逐個字元讀入,直到出現分隔符為止。
i=0;
while(1)
{
a[line].s[i]=getchar();//讀入一個字元。
if(a[line].s[i]==',')//發現分隔符
{
a[line].s[i]='';//賦值字元串結束符。
break;//退出讀取字元串。
}
i++;
}
//由於在讀字元串的時候分隔符已經被讀取,這里不需要讀分隔符,而是直接讀下一個元素。
fscanf(fp,"%f",&a[line].f);//從文件中讀取最後一個元素。
c=getchar();//讀取下一個字元,可能是換行符或文件結尾。
line++;
if(c==EOF)break;//到文件結尾,退出讀取。
}

fclose(fp);//關閉文件。
//以下循環用來列印所有讀到的值。
for(i=0;i<line;i++)
{
printf("%d%s%f ",a[i].a,a[i].s,a[i].f);
}
}

② C語言讀取csv大文件以及結果的存儲問題

你用C還是C++,MFC有文本庫的,若用C,處理漢字較困難
可以一次讀完文件,再處理
不定長度的數據用數組,動態內存分配都可以,反正現在內存大小應該不是問題

③ C語言讀入.csv文件後,屏幕輸出是亂碼,寫入本地文件不全,且錯行,請問C語言高手怎麼回事

csv文件中數據是用逗號分隔的,你讀出後沒有正確處理這些逗號。

④ c語言,關於讀取csv文件的數據,(一行有四列)顯示在屏幕。下面的代碼:列數據

printf ("%s\n", check);
修則橘改其中的%s呀,孫答團比如:你想固舉毀定10個寬度,即:%10s.

⑤ c語言讀csv

//隨便寫了一個,只能取到拋磚引玉的效果,時間有限。如果有不明白的地方再和我聯系吧
#define MAXCHAR 100
int main()
{
FILE *pb;
int i,num = 0,j = 0;
char pchar[MAXCHAR];
char **ppstr;
char *pstr,*ppchar;
memset(pchar, 0, 100);
pb = fopen("D:\\pb.csv","r");
if (pb == NULL)
{
printf("error!");
return;
}
ppstr = (char **)malloc(5*sizeof(char *));//這個最多可以存5條數據
pstr = (char *)malloc(5*20);//最多5條數據,每個數據不超過20-1=19
for (i = 0; i < 5; i++)
{
ppstr[i] = pstr + i*20;
}
memset(pstr, 0 ,100);
fseek(pb, 0, SEEK_SET);
fread(pchar, 1, 100, pb);
ppchar = pchar;
i = 0;
while (*ppchar)
{
if (*ppchar == 0x2c)//csv文件中一條數據和另外一條數據之間分隔符0x2c
{
memcpy(ppstr[j], pchar+num,i - num);
j++;
num = i+1;
}
if (*ppchar == 0x0a)//CSV文件中的換行符
{
memcpy(ppstr[j], pchar+num,i - num);
j++;
num = i+1;
}
i++;
ppchar++;
}
for (i = 0; i < j; i++)
{
printf("%s\n", ppstr[i]);
}
free(pstr);
free(ppstr);
return;
}

⑥ 如何用c語言讀取cvs文件到二維數組里

1、使用雙層循環語句,就可以依次把數據順序讀入到一個二維數組當中了。
2、冊轎常式:
代碼如下:李姿液

#include <stdio.h>
#include <string.h>

char *trim(char *str)
{
char *p = str;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
p ++;
str = p;
p = str + strlen(str) - 1;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
-- p;
*(p + 1) = '\0';
return str;
}
int main()
{
FILE *fp = fopen("test.csv", "r");
if(fp == NULL) {
return -1;
}

char line[1024];
while(fgets(line, sizeof(line), fp)) {
//printf("%s", line);

char *save_ptr;
char *name = strtok_r(line, ",", &save_ptr);
if (name == NULL) {
return -1;
}
char *age = strtok_r(NULL, ",", &save_ptr);
char *birthday = strtok_r(NULL, ",", &save_ptr);
printf("%s\哪物t%s\t%s\n", trim(name), trim(age), trim(birthday));
}
return 0;
}