关于文本文件的读取问题

jack_za123 2009-01-19 10:11:37
想要一个文本文件的读取实例代码;包括文件的读取,写入,

读取用指针,

比如文件 1.txt 里的内容是 小红(换行)小白,这样子,我怎么让指针移动到下一行呢
...全文
133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
senkobqb 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhiyou007 的回复:]
比如我传如第2行,然后打印小白,5楼的意思是,从文件里查找小白
[/Quote]
还是上面的代码, 先统计文件的行数, 第二次再去遍历, 然后把你传给的行数打出来就行了.(那些判断条件就要靠楼主自己过手了)
jack_za123 2009-01-19
  • 打赏
  • 举报
回复
如果用指针有办法实现吗?
yangkunhenry 2009-01-19
  • 打赏
  • 举报
回复

#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;

int main()
{
fstream file("D:\\in.txt", ios::in);
int num_line=0; //添个变量记录读取的行数就可以啦
if(!file)
{
cerr<<"error"<<endl;
exit(1);
}
cout<<"Please input the line you want to find:";
int x;
cin>>x;
string line;
while(getline(file, line))//读文件
{
num_line++;
istringstream stream(line);
if(num_line==x)
cout<<num_line<<":"<<line<<endl;
}
return 0;
}
xiaoyisnail 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhiyou007 的回复:]
比如我传如第2行,然后打印小白,5楼的意思是,从文件里查找小白
[/Quote]


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

void print_line(int line_no)
{
fstream file("in.txt", ios::in);
if(!file)
{
cerr<<"error"<<endl;
exit(1);
}

string line;
int no = 1;
bool flag = false;
while(getline(file, line))//读文件
{
if(no == line_no)//判断是否要打印的行
{
cout<<line<<endl;
flag = true;
break;
}

++no;
}

if(!flag)//若没有这行,输出提示信息
cout<<"no this line!"<<endl;
}

int main()
{
print_line(2);//打印第二行
return 0;
}
jack_za123 2009-01-19
  • 打赏
  • 举报
回复
比如我传如第2行,然后打印小白,5楼的意思是,从文件里查找小白
jack_za123 2009-01-19
  • 打赏
  • 举报
回复
不是这个意思啊,我的意思是知道随机生成行号,然后找到行号那的名字
tangshuiling 2009-01-19
  • 打赏
  • 举报
回复
楼主要学会自己独立考虑问题的能力,5楼已经给了你代码了,想要加行号还不简单。



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

int main()
{
fstream file("in.txt", ios::in);
int num_line=0; //添个变量记录读取的行数就可以啦
if(!file)
{
cerr<<"error"<<endl;
exit(1);
}

string line;
while(getline(file, line))//读文件
{
num_line++;
if(strstr(line.c_str(), "小白"))//判断是否为小白
cout<<num_line<<":"<<line<<endl;
}

return 0;
}





jack_za123 2009-01-19
  • 打赏
  • 举报
回复
谢谢5楼的程序,但我生成随机应该是行数啊,所以在函数中应该传入行数,然后打印那一行的名字
xiaoyisnail 2009-01-19
  • 打赏
  • 举报
回复

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

int main()
{
fstream file("in.txt", ios::in);
if(!file)
{
cerr<<"error"<<endl;
exit(1);
}

string line;
while(getline(file, line))//读文件
{
if(strstr(line.c_str(), "小白"))//判断是否为小白
cout<<line<<endl;
}

return 0;
}


in.txt:

小红
小白
小黄


运行结果输出:

小白
senkobqb 2009-01-19
  • 打赏
  • 举报
回复
我来说说我的想法,楼主的意思是想定位到指定的值吧?
如果是这样的话,建议用 变量名 = 变量值 的方式存储数据, 也就是类似INI文件的样式.
然后用fgets()遍历整个文本文件, 一行行的读取, 然后用字符串操作函数定位'='的左右值.
您看行吗?
jack_za123 2009-01-19
  • 打赏
  • 举报
回复
我的意思不是这个 不如我的1.txt里面有3行,小红,小白,小黄。我只想输出小白,通过指针怎么得到他啊
yellowhwb 2009-01-19
  • 打赏
  • 举报
回复

#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char msg[] = "this is a test";
char buf[20];
if ((stream = fopen("DUMMY.FIL", "w+"))
== NULL)
{
fprintf(stderr,
"Cannot open output file.\n");
return 1;
}
/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);
/* seek to the beginning of the file */
fseek(stream, 0, SEEK_SET);
/* read the data and display it */
fread(buf, strlen(msg)+1, 1,stream); /*这里读到buf里以后,在判断是不是回车换行,也就是buf[i]=10*/
printf("%s\n", buf);
fclose(stream);
return 0;
}
Normandie007 2009-01-19
  • 打赏
  • 举报
回复
*p = 13; //回车
*(p+1) = 10; //换行
jack_za123 2009-01-19
  • 打赏
  • 举报
回复
谢谢大家,我就此结贴吧,现在我明白了,我是新手,有些问题问的很白痴,要包涵呢

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧