導航:首頁 > 文件教程 > c語言文件操作讀取一行

c語言文件操作讀取一行

發布時間:2024-12-21 06:59:13

1. c語言逐行讀取文件

可以使用fgets函數。

1 函數名:

fgets

2 聲明:

char *fgets(char *buf, int bufsize, FILE *stream);

3 頭文件:

stdio.h

4 功能:

從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字元數組中,每次最多讀取bufsize-1個字元(第bufsize個字元賦''),如果文件中的該行,不足bufsize個字元,則讀完該行就結束。如若該行(包括最後一個換行符)的字元數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩沖區總是以NULL字元結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。因此我們不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該藉助feof函數或者ferror函數來判斷。


5 參數:

*buf:字元型指針,指向用來存儲所得數據的地址。

bufsize:整型數據,指明存儲數據的大小。

*stream:文件結構體指針,將要讀取的文件流。


6 返回值:

成功,則返回第一個參數buf;

在讀字元時遇到end-of-file(文件結尾),則eof指示器被設置,如果還沒讀入任何字元就遇到這種情況,則buf保持原來的內容,返回NULL;

如果發生讀入錯誤,error指示器被設置,返回NULL,buf的值可能被改變。


7 示例代碼

逐行讀取in.txt中的數據,並列印。每行不超過100個字元。

intmain()
{
FILE*fp;
charbuf[101];
fp=fopen("in.txt","r");//打開文件
while(fgets(buf,sizeof(buf),fp))//每次讀取一行數據,直到讀取失敗。
{
printf("%s ",buf);//列印該行。
}
fclose(fp);//關閉文件。

return0;
}

2. c語言中從文件中按行讀取字元串,並進行相應操作。

#include "stdafx.h"
#include "stdio.h"
#define ColNum 4 //總列數
#define QCIndex (1-1) //去重列號
#define PXIndex (3-1) //排序列號

typedef struct txtnode{
struct txtnode* next;
char* col[ColNum];
} TXTNODE;

void CopyToNode(TXTNODE*node,char *buf)
{
if(!buf||!*buf) return;
int j,len = strlen(buf);
char *p = (char*)malloc(len+1);
strcpy(p, buf);
node->col[0] = p;
for(j=1; *p&&j<ColNum; p++)
if(*p=='\t')
{
*p++='\0';
if(*p) node->col[j++] = p;
}
if(j<ColNum) node->col[0][0] = '\0';//放棄列數不足的行
}

int findnode(TXTNODE*Head,TXTNODE*node,int colIndex)
{
if(Head)
{
for(TXTNODE*p=Head; p; p=p->next)
if(strcmp(node->col[colIndex], p->col[colIndex])==0) return 1;
}
return 0;
}

int insertNode(TXTNODE**Head,TXTNODE*node,int colIndex)
{
TXTNODE*p0,*p1;
for(p0=NULL,p1=*Head; p1; p0=p1,p1=p1->next)
{
if(strcmp(node->col[colIndex], p1->col[colIndex])>=0)continue; //升序用>=0 降序排則用<=0
if(p0)//插在p0後p1前
{
p0->next=node;
node->next = p1;
}
else//插在開頭
{
*Head = node;
node->next = p1;
}
return 0;
}
if(p0)//插在末尾 p1==NULL
{
p0->next=node;
node->next = NULL;
}
else//第一次調用 走到這里
{
*Head = node;
node->next = NULL;
}
return 0;
}

void deleteLink(TXTNODE**Head)
{
TXTNODE *p0,*p1;
p1 = *Head;
while(p1)
{
p0 = p1;
p1=p1->next;
free(p0->col[0]);
free(p0);
}
*Head = NULL;
}

void writeLink(TXTNODE*Head,FILE*wfp)
{
TXTNODE *p0=Head;
int i;
while(p0)
{
for(i=0; i<ColNum-1; i++)
fprintf(wfp,"%s\t",p0->col[i]);
fprintf(wfp,"%s",p0->col[i]);
p0=p0->next;
}
}

TXTNODE* readTxt(FILE*rfp)
{
char buf[10240]={0};
TXTNODE* head=NULL, *tmp;
while(!feof(rfp))
{
fgets(buf,10240,rfp);
if(!*buf) continue;
tmp=(TXTNODE*)malloc(sizeof(TXTNODE));
memset(tmp,0,sizeof(TXTNODE));
CopyToNode(tmp,buf);
if(tmp->col[0][0] && !findnode(head, tmp, QCIndex))
{
insertNode(&head, tmp, PXIndex);
}
else
{
free(tmp->col[0]);
free(tmp);
}
}
return head;
}

void main(int argc,char*argv[])
{
FILE *rfp,*wfp;
TXTNODE*Head = NULL;
if(argc<3){printf("去重排序小程序,調用格式:\n命令名 源文件 目標文件");exit(-1);}
rfp = fopen(argv[1],"rb");
if(rfp==NULL){printf("源文件[%s]打不開",argv[1]);exit(-2);}
wfp = fopen(argv[2],"wb");
if(wfp==NULL){fclose(rfp);printf("目標文件[%s]打不開",argv[2]);exit(-2);}
Head = readTxt(rfp);
writeLink(Head,wfp);
fclose(rfp);
fclose(wfp);
deleteLink(&Head);
printf("處理完畢!\n");
}
//VC7下調試運行通過,功能正常 方便改造
//我閑得蛋痛了,花一兩小時時間給你做這小程序(調試費了好一會才通過),沒有分送,大大的不值

3. c語言 如何從文件中讀取一行,處理過後存到另一個文件,再讀下一行,在處理,再存

這是一個文件拷貝程序,是按行拷貝的,每行都會被存到buf字元數組里,你要做什麼操回作,在while循環里做就行答了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
FILE * fd;
char buf[1024*1024];
printf("1\n");
fp=fopen("a.out","rb");
if(fp==NULL)
{
perror("open file");
exit(0);
}
fd=fopen("data/a.out","wb");
if(fd==NULL)
{
perror("open file");
exit(0);
}
while(fgets(buf,sizeof(buf),fp)!=NULL)
{

fputs(buf,fd);
}
fclose(fd);
fclose(fp);
return 0;
}

4. 如何用C語言讀取txt文檔中最後一行數據

如果想自由地讀取txt文檔任意位置,就只能使用隨機讀寫數據文件的方式來讀與寫的操作。因為C語言里的隨機讀寫數據文件提供了 「文件位置標記」和定位的相關函數。
例如:
rewind函數使文件位置標記指向文件開頭
fseek函數改變文件位置標記,其中該函數的原型為:
fseek(文件類型指針,位移量,起始點);
如果僅僅是想讀取文件末尾一行數據,只需把起始點定位到文件末尾,位移量為負數代表向後挪的意思。
如:
fseek(fp,-100L,SEEK_END); // 文件游標定位到文件末尾處,然後向後退100個位元組。
緊接著就是讀取了:
fread(buffer,100,1,fp);

5. 關於C語言中文本文件的逐行讀取的實現

若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾版,即文件原先的權內容會被保留。

以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。

C語言中文本文件的逐行讀取的實現的代碼如下:

#include<stdio.h>

main()

{

FILE * fp;

fp=fopen(「noexist」,」a+」);

if(fp= =NULL) return;

fclose(fp);

}

(5)c語言文件操作讀取一行擴展閱讀

1、如果輸入文本每行中沒有空格,則line在輸入文本中按換行符分隔符循環取值。

2、如果輸入文本中包括空格或製表符,則不是換行讀取,line在輸入文本中按空格分隔符或製表符或換行符特環取值。

3、可以通過把IFS設置為換行符來達到逐行讀取的功能。

6. c語言怎樣按行讀取

區分讀取的源,有如下兩種情況:

1 從標准輸入讀取,即stdin。
可以使用gets函數:
char * gets(char *str);
該函數會從標准版輸入中讀權取一行數據,直到讀到\n,並將\n替換為字元串結束符\0,讀取到的數據以字元串形式存於str中。
需要注意的是,使用gets函數時,需要確保str指向空間大小,必須超過任意一行的長度,否則會出現越界操作。有些編譯器會報gets是不安全的,就是這個原因。

2 從文件讀取。
對於一個被打開的文件,如果其是可讀的,那麼可以通過fgets函數實現按行讀取。
char *fgets(char *buf, int bufsize, FILE *fp);
功能與gets類似,只是源不同。fgets從fp中讀一行數據存到buf中,同時會判斷bufsize,如果一行數據的長度超過了bufsize,那麼只讀入bufsize長度的數據,確保不會溢出。否則讀取整行。
由於在C語言中,標准輸入stdin也是以文件指針形式存在的,所以gets可以用
fgets(str, bufsize, stdin);
替代,這樣代碼量稍多一些,但可以更安全。

7. 如何用c語言從txt文件中讀取數據

用C語言從txt文件中讀取數據,可以使用C標准庫文件自帶的文件介面函數進行操作。
一、打開文件:
FILE *fopen(const char *filename, const char *mode);
因為txt文件為文本文件, 所以打開時選擇的mode應為"r"或者"rt"。
二、讀取文件:
讀取文件應根據文件內容的格式,以及程序要求,選擇讀取文件的函數。可以使用一種,也可以幾種混用。 常用的文件讀取函數如下:
1、fgetc, 從文件中讀取一個位元組並返回。 適用於逐個位元組讀取。
2、 fgets, 從文件中讀取一行。適用於整行讀取。
3、fscanf, 格式化讀取文件, 在已經清楚文件存儲格式下,可以直接用fscanf把文件數據讀取到對應類型的變數中。
4、fread, 整塊讀取文件, 對於txt文件比較少用。
三、關閉文件:
讀取結束後,應調用fclose函數關閉文件。

8. C語言 文件操作,要讀取一個txt文件內容

//data.txt文件內容如下

1 個 豬內
2 個 豬
3 個 豬
4 個 豬
5 個 豬
6 個 豬
7 個 豬
8 個 豬

//運行結果容一
the 8 line :8 個 豬

Press any key to continue
//運行結果二
out of range!
Press any key to continue

//代碼如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(void)
{
int lid,cnt=0,flag=0;;
char buf[100]="\0";
FILE *fp;

srand((unsigned)time(NULL));
fp=fopen("data.txt","r");
lid= rand()%10+1;
while (fgets(buf,99,fp)!=NULL)
{
if(cnt==lid)
{
printf("the %d line :%s\n",lid+1,buf);
flag=1;
break;
}
cnt++;
}
if (flag==0)
{
printf("out of range!\n");
}
}

閱讀全文

與c語言文件操作讀取一行相關的資料

熱點內容
哪些地方網路信號更好些 瀏覽:753
jar反編輯工具 瀏覽:614
描述數據波動大小有哪些 瀏覽:584
u盤exfat可復制4g以上的文件嗎 瀏覽:667
a4大小的文件過塑多少錢 瀏覽:26
暢天游2app在哪裡下載 瀏覽:844
微信看文字的圖片 瀏覽:298
將文件直接粘入word 瀏覽:134
VIP解析APP有哪些 瀏覽:463
怎樣徹底卸載cad文件 瀏覽:829
iphone4港版 瀏覽:624
怎麼用命令打開程序錯誤 瀏覽:665
iphone6怎麼改控制中心 瀏覽:808
ns錯誤代碼 瀏覽:653
iphone4s如何取消軟體更新提示 瀏覽:538
jsp列印換行 瀏覽:662
哪個軟體可以編程手機軟體 瀏覽:554
如東如何學數控編程培訓 瀏覽:5
微信h5頁面怎麼修改 瀏覽:931
手機怎麼無法打開視頻文件夾 瀏覽:840

友情鏈接