VC和C 按行讀取文字檔案

2021-06-18 19:47:11 字數 4234 閱讀 7570

1.mfc

cstring filename="d:\\3.txt",files="d:\\32.txt",filestring;

cstdiofile   f,g;  

if(f.open(filename,   cfile::moderead)   ==   true)   //filename為開啟檔名  

}  cstring decimaltobinary(cstring strdecimal)//

將輸入的十進位制數轉換為二進位制數

return strbinary;

}2. c語言

file *fp;

if(fp=fopen(filename,"r"))

}

fclose(fp);

void strend(char *str)

} char* findstr(char* str,char p)

3. c++讀取按行讀取

#include

#include

#include

#include

int main()

c 檔案操作

1.fopen、fclose

fopen:功能開啟檔案

fclose:功能關閉檔案

標頭檔案:#include

定義函式:file * fopen(const char * path,const char * mode);

函式引數說明:

path:字串包含欲開啟的檔案路徑及檔名。

mode:字串則代表著流形態,取值如下:

"r "開啟唯讀檔案,該檔案必須存在。

"r+ "開啟可讀寫的檔案,該檔案必須存在。

"w "開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。

"w+ "開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

"a "以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。

"a+"以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。

上述的形態字串都可以再加乙個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函式庫開啟的檔案為二進位制檔案,而非純文字檔案。不過在posix系統,包含linux都會忽略該字元。由fopen()所建立的新檔案會具有s_irusr|s_iwusr|s_irgrp|s_iwgrp|s_iroth|s_iwoth(0666)許可權,此檔案許可權也會參考umask 值。

返回值:

檔案順利開啟後,指向該流的檔案指標就會被返回。若果檔案開啟失敗則返回null,並把錯誤**存在errno 中。

附加說明

一般而言,開啟檔案後會作一些檔案讀取或寫入的動作,若開檔案失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。

2.fread 和 fwrite:

宣告:

#include

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

引數解釋:

size

指出一條記錄的長度,

nmemb

指出要讀或寫多少條記錄,這些記錄在ptr

所指的記憶體空間中連續存放,共佔size * nmemb

個位元組,fread

從檔案stream

中讀出size * nmemb

個位元組儲存到ptr

中,而fwrite

ptr

中的size * nmemb

個位元組寫到檔案stream

中。

返回值:

讀或寫的記錄數,成功時返回的記錄數等於nmemb,出錯或讀到檔案末尾時返回的記錄數小於nmemb,也可能返回0。

功能:

fread()──從fp所指向檔案的當前位置開始,一次讀入size個位元組,重複count次,並將讀入的資料存放到從buffer開始的記憶體中; buffer是存放讀入資料的起始位址(即存放何處)。

fwrite()──從buffer開始,一次輸出size個位元組,重複count次,並將輸出的資料存放到fp所指向的檔案中。buffer是要輸出資料在記憶體中的起始位址(即從何處開始輸出)。

freadfwrite用於讀寫記錄,這裡的記錄是指一串固定長度的位元組,比如乙個int

、乙個結構體或者乙個定長陣列。

nmemb是請求讀或寫的記錄數,fread

fwrite

返回的記錄數有可能小於nmemb

指定的記錄數。例如當前讀寫位置距檔案末尾只有一條記錄的長度,呼叫fread

時指定nmemb

為2,則返回值為1。如果當前讀寫位置已經在檔案末尾了,或者讀檔案時出錯了,則fread

返回0。如果寫檔案時出錯了,則fwrite

的返回值小於nmemb

指定的值。下面的例子由兩個程式組成,乙個程式把結構體儲存到檔案中,另乙個程式和從檔案中讀出結構體。

3.fseek用法

int fseek(file *stream, long offset, int fromwhere);

引數:

第乙個引數file指標

第二個引數移動的偏移量

第三個引數移動到**

分別用3個巨集

seek_set 既0 檔案開頭

seek_cur 既1 檔案當前位置

seek_end 既2 檔案結尾

不推薦用數字 最好用巨集

簡言之:

fseek(fp,100l,seek_set);把fp指標移動到離檔案開頭100位元組處;

fseek(fp,100l,seek_cur);把fp指標移動到離檔案當前位置100位元組處;

fseek(fp,100l,seek_end);把fp指標退回到離檔案結尾100位元組處。

此函式跟ftell函式結合常用來計算流的長度:

fseek(fp, 0, seek_end);

long filelength = ftell(fp);

取檔案長度

file * file;

fseek(file, 0, seek_end);

long len=ftell(file);

fseek(file,0,seek_set);

long ftell(file * stream);

函式說明

ftell()用來取得檔案流目前的讀寫位置。引數stream為已開啟的檔案指標。

返回值

當呼叫成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤**。

linux讀取按行讀寫文字檔案

1.include 2.include 3.include 4.include 5.include 6.include 7.8.9.typedef struct item t item 13.14.15.去除字串右端空格 16.17.char strtrimr char pstr 18.25.26....

C 快速隨機按行讀取大型文字檔案

下面是我實現的乙個資料檔案隨機讀取類,可以隨機讀取大型文字檔案的某一行。在我機器上對乙個130mb的文字檔案,讀取第200000的速度從傳統做法的400ms提高到了3ms。一般對文字檔案進行讀取時,一般採用readline 進行逐行讀取。在這種情況下,c 內的filestream和buffereds...

shell按行分割文字檔案

大家常用的分割文字的方法都是通過sed n 命令來操作,sed 的優點是可以指定具體的行,缺點每次分割要重新讀取整個文字,效率低了點。在高人指點下發現split這個方法好用些,也參考了其他的資料總結一下split用法。split 引數 需要分割的檔案 b size 對file進行切分,每個小檔案大小...