关于循环读取文件中多行字符串的程序

时间:2023-01-04 14:28:18
我需要写一个循环读取多行字符串的C程序。例如,有一个201009291243.txt文档,里面有多行字符串,每一行字符串中既又字母也有数字,每一行字符串的长度不确定,我想每一次读取一行的字符串,然后把读取的一行字符串中前三个字符存入一数组进行类型匹配,然后把从第六个以后的所有字符写入到另一个txt文档中。

还请各位高手把具体的代码发上来。先谢拉...

8 个解决方案

#1


个人建议你先自己实现以下这个功能,有误或者结果不正确,再由大家一起讨论

#2



#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
FILE* ifp=0;
FILE* oallfile=0;
const char* iallfp="/media/本地磁盘/datafiles/0502BeijingIT_201009291243.txt";
ifp=fopen(iallfp,"r");
if(ifp==NULL)
{
printf("Can not open the source file!\n");
return 1;
}
while(!feof(ifp))
{
char* a;
a=(char*)malloc(1000);
fgets(a,1000,ifp);
int pos2=0,pos3=0;
char c[10];

char data[2000];
memset(&data,0,sizeof(data));
memset(&c, 0, sizeof(c));
while (*a++ != ',')
++pos2;
strncpy(c, a-pos2-1, pos2);
while (*a++ != '/')
++pos3;
strncpy(data,a-3,pos3+200);

// 获取源文件的路径和文件名
char* p=iallfp;
int pos1 = 0;
char s[100];
memset(&s, 0, sizeof(s));
while (*p++ != '.')
++pos1;
strncpy(s, iallfp, pos1+1);
char ofilename[150];

strcpy(ofilename,s);
strcat(ofilename,c);
oallfile=fopen(ofilename,"w+");//创建并打开存储数据的txt文档
if(oallfile==NULL)
{
printf("Can not ctreat target file!\n ");
return 2;
}
fprintf(oallfile,"%s\n",data);
fclose(oallfile);
}
return 0;
}


这就是我实现的代码,但是这个代码不能完全读取源文件中所有行的字符串,只能读取最后几行的字符串写入到新的文件。各位高手请看看出了什么问题?

#3


引用 1 楼 jixingzhong 的回复:
个人建议你先自己实现以下这个功能,有误或者结果不正确,再由大家一起讨论


jixingzhong,麻烦你看看有什么问题?

#4


LZ会debug不?

#5


一直在malloc 没有free啊

#6


lz写一下程序运行的结果,和期望结果。

#7


我现在感觉C++里面的ifstream和string结合处理这样的问题简直得心应手啊,呵呵
一行一行的读文件例子如下:

#include <isotream>
#include <fstream>
#include <string>
using namespace std;

int readFile(char fileName[]) //fileName是需要处理的文件名
{
ifstream in(fileName);
if (!in)
{
cerr << "Cannot open the file:" << fileName << endl;
exit(EXIT_FAILURE);
}

string str = "";
while (getline(in,str))
{
//调用str.substr()截取三个字符进行处理                     
}

in.close();
}

#8


最后那个循环里文档的打开方式错拉,以你那种打开方式只会每次打开就把写入文件的上一条数据给覆盖了,把w换成at就可以了。

#1


个人建议你先自己实现以下这个功能,有误或者结果不正确,再由大家一起讨论

#2



#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
FILE* ifp=0;
FILE* oallfile=0;
const char* iallfp="/media/本地磁盘/datafiles/0502BeijingIT_201009291243.txt";
ifp=fopen(iallfp,"r");
if(ifp==NULL)
{
printf("Can not open the source file!\n");
return 1;
}
while(!feof(ifp))
{
char* a;
a=(char*)malloc(1000);
fgets(a,1000,ifp);
int pos2=0,pos3=0;
char c[10];

char data[2000];
memset(&data,0,sizeof(data));
memset(&c, 0, sizeof(c));
while (*a++ != ',')
++pos2;
strncpy(c, a-pos2-1, pos2);
while (*a++ != '/')
++pos3;
strncpy(data,a-3,pos3+200);

// 获取源文件的路径和文件名
char* p=iallfp;
int pos1 = 0;
char s[100];
memset(&s, 0, sizeof(s));
while (*p++ != '.')
++pos1;
strncpy(s, iallfp, pos1+1);
char ofilename[150];

strcpy(ofilename,s);
strcat(ofilename,c);
oallfile=fopen(ofilename,"w+");//创建并打开存储数据的txt文档
if(oallfile==NULL)
{
printf("Can not ctreat target file!\n ");
return 2;
}
fprintf(oallfile,"%s\n",data);
fclose(oallfile);
}
return 0;
}


这就是我实现的代码,但是这个代码不能完全读取源文件中所有行的字符串,只能读取最后几行的字符串写入到新的文件。各位高手请看看出了什么问题?

#3


引用 1 楼 jixingzhong 的回复:
个人建议你先自己实现以下这个功能,有误或者结果不正确,再由大家一起讨论


jixingzhong,麻烦你看看有什么问题?

#4


LZ会debug不?

#5


一直在malloc 没有free啊

#6


lz写一下程序运行的结果,和期望结果。

#7


我现在感觉C++里面的ifstream和string结合处理这样的问题简直得心应手啊,呵呵
一行一行的读文件例子如下:

#include <isotream>
#include <fstream>
#include <string>
using namespace std;

int readFile(char fileName[]) //fileName是需要处理的文件名
{
ifstream in(fileName);
if (!in)
{
cerr << "Cannot open the file:" << fileName << endl;
exit(EXIT_FAILURE);
}

string str = "";
while (getline(in,str))
{
//调用str.substr()截取三个字符进行处理                     
}

in.close();
}

#8


最后那个循环里文档的打开方式错拉,以你那种打开方式只会每次打开就把写入文件的上一条数据给覆盖了,把w换成at就可以了。