导航:首页 > 文件目录 > 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按行读取文件内容相关的资料

热点内容
u盘文件给删了 浏览:737
vuejsoauth2 浏览:78
2017微信支付日 浏览:81
机械臂编程如何开发 浏览:21
标书U盘PDF文件要不要签字 浏览:222
ps软件文件复制到d盘 浏览:148
一般工业固废招标文件内容 浏览:583
网站建设报价怎么算 浏览:66
三星a7000升级安卓502 浏览:486
word2010清除分隔符 浏览:781
乐视怎么切换网络 浏览:425
cad打印pdf文件名称与cad不一致 浏览:815
电气与可编程控制是什么 浏览:67
文件名中允许使用英文竖线吗 浏览:531
编程猫在哪里 浏览:775
win8共享文件夹访问权限 浏览:380
cad文件显示为只读不能保存怎么办 浏览:703
如何在系统里忘记网络 浏览:24
中小企业出口数据在哪里找 浏览:715
win8和xp传文件 浏览:75

友情链接