csvc語言
① 用c語言寫CSV文件,如何寫出多個工作表
CSV 文件 不支持 EXCEL中 的多個工作表的模式。 一個 CVS 文件只能轉換成 EXCEL 一個工作表。
另外,如果你想把一個 EXCEL 文件保存為 CSV 文件,也會提示你是否只保存當前活動的工作表,或者為每個工作表分別保存一個 CSV 文件。
② C語言怎麼讀取CSV裡面的數據
cvs文件用記事本打開你會發現,其實它是用tab製表符來分單元格的,可以考慮按照'\t'來分詞。
③ C語言輸出csv文件格式如何換列
csv文件即逗號分隔值文件。
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。
純文本意味著該文件是一個字元序列,不含必須像二進制數字那樣被解讀的數據。
CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由欄位組成,欄位間的分隔符是其它字元或字元串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的欄位序列。
要用C語言讀取CSV,首先需要確定文件中定義的字元分隔值,以及每一行各個列的元素格式。
如果所有的元素格式相同,那麼可以每行一個一維數組,所有行組成一個二維數組,逐個元素進行讀取。
如果元素格式不同,可以按照元素類型,構建一個結構體,每行讀到一個結構體變數中,所有行組成一個結構體數組。
下面根據兩種情況,按照分隔符為逗號(,),分別舉一個例子:
文件名設定為in.csv,每行10個元素。
一、所有元素均相同類型,比如int型。
#include <stdio.h>
int main()
{
FILE*fp;
int a[100][10];//定義一個足夠大的數組來存儲。
int line = 0;
int c, 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 == '\n'||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("\n");
}
}
二、每行元素不同。
比如共三列,第一列是int型,第二列是字元串,第三列是float型。
如果分隔符不是空白字元,或者字元串元素中可能存在除分隔符外的其它空白字元,在讀取字元串的時候是不能用fscanf函數的。
定義結構體如下
strcut data
{
int a;
char s[100]; //根據實際要求,定義足夠大的字元數組。
float f;
};
讀取代碼如下:
#include <stdio.h>
int main()
{
FILE*fp;
strcut data a[100];//定義一個足夠大的結構體一維數組來存儲。
int line = 0;
int c,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]='\0'; //賦值字元串結束符。
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\n", a[i].a, a[i].s, a[i].f);
}
}
④ C語言讀取CSV文件到二維數組
這個程序的關鍵部分是讀每一行中,
由逗號分隔的各個欄位,也即token.
對每一行,把每個欄位逐一取出,然後想用就用,不用丟棄.----這個思路,應該是既單純,又比較優雅吧.
為此,為你單獨寫了這一思路的實現及相關測試,
代碼如下:
---------------------------------------opstring.c
int get_next_token_CLangVersion
( const char* from , //0218,13
char* token, char token_seper )
{
static char* from_old = 0 ;
static int fromidx = 0;
char c ;
//init for new begin
if (from != from_old )
{ from_old = from ;
fromidx = 0 ;
}
//init for next new token
*token = 0 ;
//check --can be getting ?
if (fromidx == -1) return -1;
//get token
//get a char from "from", then get again
while ( (c=*(from+fromidx++))
!= 0 && c != token_seper )
*(token++) = c ;
//get done
if ( c== 0) fromidx = -1 ;
if ( c== token_seper)
{/*do nothing .
fromidx恰好已指向下一個token之起始位置*/
}
*token = 0; //token結束
return 0 ;
}
-------------------------------------------------test.c
#include <stdio.h>
#include "opstring.h"
void main ()
{
char token[100] ;
char s[1024] ;
int ret = 0;
scanf ( "%s", s) ;
*token = '#';
for ( ; ret != -1;)
{ printf ("token--%s--\n", token) ;
ret = get_next_token_CLangVersion (s, token, ',') ;
}
}
/*
23,,,3444444443lld,,4444444444444444,266,d,,fddd3-,
token--#--
token--23--
token----
token----
token--3444444443lld--
token----
token--4444444444444444--
token--266--
token--d--
token----
token--fddd3---
token----
*/
-------------------------------------------opstring.h
int get_next_token_CLangVersion ( const char* from ,char* token, char token_seper ) ;
該實現在Borland C++ 5.6.4 for Win32 環境下,測試通過.
該實現是可復用的喲.祝你好運.
關鍵部分解決了,其它部分對你而言,應該是小菜一碟吧呵,我想.^_^
⑤ 做一個處理.csv文件的小程序需要什麼編程語言
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。
純文本意味著該文件是一個字元序列,不含必須像二進制數字那樣被解讀的數據。
CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由欄位組成,欄位間的分隔符是其它字元或字元串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的欄位序列。
要用C語言讀取CSV,首先需要確定文件中定義的字元分隔值,以及每一行各個列的元素格式。
如果所有的元素格式相同,那麼可以每行一個一維數組,所有行組成一個二維數組,逐個元素進行讀取。
如果元素格式不同,可以按照元素類型,構建一個結構體,每行讀到一個結構體變數中,所有行組成一個結構體數組。
下面根據兩種情況,按照分隔符為逗號(,),分別舉一個例子:
文件名設定為in.csv,每行10個元素。
一、所有元素均相同類型,比如int型。
#include <stdio.h>
int main()
{
FILE*fp;
int a[100][10];//定義一個足夠大的數組來存儲。
int line = 0;
int c, 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 == '\n'||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("\n");
}
}
二、每行元素不同。
比如共三列,第一列是int型,第二列是字元串,第三列是float型。
如果分隔符不是空白字元,或者字元串元素中可能存在除分隔符外的其它空白字元,在讀取字元串的時候是不能用fscanf函數的。
定義結構體如下
strcut data
{
int a;
char s[100]; //根據實際要求,定義足夠大的字元數組。
float f;
};
讀取代碼如下:
#include <stdio.h>
int main()
{
FILE*fp;
strcut data a[100];//定義一個足夠大的結構體一維數組來存儲。
int line = 0;
int c,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]='\0'; //賦值字元串結束符。
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\n", a[i].a, a[i].s, a[i].f);
}
}
⑥ 用c語言來打開csv格式內容怎麼做
csv是逗號分隔的, 其它的 都等同於純文本
所以 簡單的csv文件, 只需要按照文本方式打開
然後以逗號為分隔符 讀取每個域的內容就可以了。
可以根據內容約定, 存儲成數組或者結構體
⑦ 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語言讀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]='