導航:首頁 > 文件目錄 > vc按行讀取文件內容

vc按行讀取文件內容

發布時間:2023-03-06 05:34:58

『壹』 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下調試運行通過,功能正常 方便改造
//我閑得蛋痛了,花一兩小時時間給你做這小程序(調試費了好一會才通過),沒有分送,大大的不值

『貳』 VC++按行讀取文本文件getline執行後沒有繼續讀下一行

給點建議
1.在windows系統裡面,換行是:'\r\n'
2.對於文本可以用流(可能是iostream)打開,然後判斷'\r\n'即為換行
3.原來專的代碼一眼看屬去可以優化一下

for(int i = beginSpectrum; i < endSpectrum; i++)
{
spectrum[lineNum][i - beginSpectrum] = dataLine[lineNum][i];
}
lineNum++;

如果你對for循環有更深刻的理解
可以發現能寫成下面這個樣子

for(int i = beginSpectrum; i < endSpectrum; i++,lineNum++)

『叄』 VC++怎麼按行讀寫TXT文件

CString strText;
CString szLine; //存儲行字元串

CStdioFile file;
file.Open("ts.txt",CFile::modeRead);//打開文件

//逐行讀內取字元串
while( file.ReadString( szLine ) )
{
strText += szLine;
}
MessageBox(strText);
//關閉容文件
file.Close();

閱讀全文

與vc按行讀取文件內容相關的資料

熱點內容
blocks提示找不到頭文件 瀏覽:761
在哪裡能編程C語言 瀏覽:425
c程序小學生自助四則運算練習 瀏覽:551
java定義循環數組 瀏覽:483
lol錄制文件在哪裡打開 瀏覽:168
考研哪些學校有網路空間安全 瀏覽:542
復制到d盤找不到文件 瀏覽:195
上海哪裡教焊鉗機器人編程 瀏覽:556
如何編程愛國類小游戲 瀏覽:172
喜蛋傳奇在哪個app播放 瀏覽:968
QQ郵箱會壓縮文件嗎 瀏覽:750
tc簡單打開文件夾 瀏覽:763
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643

友情鏈接