1. 程式人生 > >linux下的CSV檔案操作

linux下的CSV檔案操作

先介紹一下什麼是csv檔案,這是一種簡單的文字檔案,也被稱為逗號分隔值檔案。

主要是用於儲存簡單的資料,下面在weindows下用UE簡單生成一下檔案。


然後用excel開啟


這就是一個簡單的csv檔案,每個字元都是一個ANSI碼,圖中的第一行,1,2,3,4,5,7。

1~7每一個都是一個ANSI碼,一個逗號也是ANSI碼。

第二行的12,13,434,45,56,747,“12”儲存的是兩個ANSI碼,而“747”則儲存了三個ANSI碼,他們之間以逗號分隔。

類似的,第三行的“a”是一個ANSI碼,“cd”是兩個ANSI碼。

也就是說,無論每一個逗號分隔的一個數值是多大,每一個值都是一個字元,如果換個理解方式就是,csv檔案是一個很長很長的字串。

然後是檔案的大小,這個檔案的大小是49位元組。


通過直接數字符的方式,發現只有45個字元,包括所有逗號,多出了4個位元組。

多出的四個位元組在UE中看不到,這其實是windows獨有的換行符“\r\n”,佔了兩個字元,45加上第一行和第二行的換行符就得到了49個位元組的大小。

然後是關於檔名,windows預設檔名長256個位元組,大小是固定的,但是不會再屬性裡面體現出來。

備註:linux的換行符是“\n”,佔一個字元。

好了,關於csv檔案的介紹到此結束。

下面是關於檔案操作介紹,主要用到stdio.h這個檔案頭,這個是標準輸入輸出的一個頭包含檔案,為什麼會將檔案的操作放在標準輸入輸出的頭包含檔案裡面,而不是重新建立一個file.h,按照《c語言程式設計——現代方法》的說法,所有的輸入輸出都是一種流,輸入稱為輸入流,輸出稱為輸出流,檔案的讀操作稱為輸入流,寫操作稱為輸出流,就像往螢幕上列印東西稱為輸出流,鍵盤輸入稱為輸入流,一切與系統的互動,本質上都是一種輸入輸出的行為。

然後是開啟linux,用vim生成一個test.c檔案,然後鍵入如下程式碼

#include "stdio.h"

int main(void)
{
	FILE *f0;
	char array[] = "1,2,3,4,5,7\n12,13,434,56,747\na,b,cd,efg,h,ij";
	char array0[100];
	
	if(NULL == (f0=fopen("/home/ma/TEST/ma.csv","a")))//開啟一個ma.csv檔案,
	{                                                 //如果不存在就建立
		printf("can't  not open file\n");
	}
	else
	{
		printf("Created file succeed!\n");//建立成功就輸出這句話
		fwrite(array,sizeof(array),1,f0);//給檔案寫入array陣列
		fread(array0,sizeof(array),1,f0);//然後將檔案內容讀取到array0中
		printf("%s\n",array0);//輸出檔案內容
		fclose(f0);//關閉檔案
	}
}

在linux下的操作截圖如下


先用gcc 編譯test.c,生成a.out,然後強制執行a.out,這裡有個小細節,在linux下,生成的a.out檔案一般使用者是沒有執行許可權的,如果不限輸入sudo的話,需要對當前的資料夾獲取寫入許可權,使用chmod這個命令。執行a.out之後,生成了一個ma.csv檔案,再說一件事,在linux下,一切都是檔案,而檔名僅僅是一個識別符號,"*.csv"是沒有意義的,不要在意拓展名是啥,這僅僅起到一個關聯執行程式的意義,對真實的檔案內容沒有啥關係。

好了,這是一個簡單的檔案操作入門,具體的檔案操作函式我就不介紹了,請參考 《c語言程式設計——從入門到放棄》。

寫於2017年5月27日 

深圳