C++中怎么逐行读取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中怎么逐行读取数据相关的知识,希望对你有一定的参考价值。

例如
1
23
1.000 1.000 1.000
1.001 1.001 1.001
1.002 1.002 1.002
1.004 1.004 1.004
1.005 1.005 1.006
1.006 1.007 1.008
……
读入的数据最好是float型或者double型的,谢谢

可以使用C++的库函数getline实现。

getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。

1)读到文件结束符;

2)遇到函数指定的结束符;

3)输入达到最大限度。

getline有两种重载:

istream &getline( char *buffer, streamsize num );   

 istream &getline( char *buffer, streamsize num, char delim );   

参数说明:

buffer: 读取的数据将存在buffer中。

num:最多读取num个字符。即之前所说的最大限度。

delim:结束符,当遇到指定的结束符时将结束输入。在第一种重载中,结束符为\\n,即遇到换行结束。


所以要实现整行读取,使用第一种重载就可以了。示例代码如下:

#include <iostream>
using namespace std;
int main()

    char buf[1024];//存储的buf。
    while(getline(buf,sizeof(buf)))//读取一行。
    
        cout << "read line:" <<buf<<endl;//输出读取到的数据。
    
    
    return 0;
参考技术A 假定文件在 abc.txt 中,无空白行
用读入1行,再找每行最后一个数的开始位置,用 sscanf 读得。
#include<stdio.h>
main() FILE *fin;
char str[80];
int i,L,n=0;
double x[30000];
fin=fopen("abc.txt","r");
while(1)

if ( fgets(str,80,fin)==NULL) break;
L = strlen(str);
for (i=L-1;i>0;i--)
if (str[i-1]==' ' && (str[i]>='0' && str[i]<='9'))
sscanf(&str[i-1],"%lf",&x[n]);n++;break;
;

for (i=0;i<n;i++) printf("%g\n",x[i]);
return 0;

=====
另一种方法是:
fscanf(fin,"%*s %*s %*s %lf",&x[i]);
因为你的数据有规律,可以跳过3个 读1个。 %*s 就是跳一个字符串。追问

我想问一下下面这块是什么意思,我刚学编程,很不好意思

参考技术B ifstream fin( strDataInFile.c_str(), std::ifstream::in || std::ifstream::binary );
string strLine = '"
while( getline( fin, strLine ) )

    ...

大概就是这样的结构吧,至于具体的类型,用的时候再转过来吧。

本回答被提问者采纳
参考技术C 可以利用getline函数来完成逐行读取数据。
参考资料:http://baike.baidu.com/link?url=tzYP8bufh1e6un1kvteQXE8GKDb35o9KDoovEBSbW8NiA87aZu11TFvoa3lxdvNHBUlkfVoQfoxoOhAZOt3bkK
参考技术D 先把一行读进一个String里面
String curline = getline(cin)
然后用字符串流是stringstream从一个字符串里面解析
stringstream ss;
double cur;
ss << curline;
while(ss >> cur)
//store cur;

delphi中怎么逐行读取文本文件的数据并将每行分别写入指定的不同编辑框

参考技术A FileName:string;
f:Textfile;
s:string;

FileName:='C:\this.log';
AssignFile(f,FileName);//关联文件
Reset(f);
Readln(f,s); //读一行
memo1.Lines.Add(s); //写到MEMO1
ReadLn(f,s); //再读一行
memo2.Lines.Add(s);//写到MEMO2
CloseFile(f);//关闭追问

如果数据比较多的话,操作好像很麻烦

追答

给编辑框定一个命名规则,然后根据这个规则写入,举例,编辑框名为t1,t2,t3.......
容器为Panel1
t+循环变量 形成控件名称
edit := Panel1.FindChildControl(控件名称) as TEdit ;
if(edit null) then edit.Text:= txt中读出的数据

本回答被提问者采纳
参考技术B Readln 参考技术C 读取文件比较简单,但你要求的写入不同编辑框有点歧义:是你当前自己编写的窗口上的编辑框吗?追问

恩,比如说我非常第一行要写入EDIT1,第二行要写入EDIT2。我现在一个一个写可以实现,但如果数据多的,那量就非常大了

追答

说下思路:

1. 用TStringList载入文本文件。
2. 循环读取每行内容,并写入指定的编辑框。

小提示:如果你每行文本内容对应的编辑框都是指定的不同编辑框,那么建议在文本的每行除了内容之外,还需要保存编辑框的名称。

以上是关于C++中怎么逐行读取数据的主要内容,如果未能解决你的问题,请参考以下文章

delphi中怎么逐行读取文本文件的数据并将每行分别写入指定的不同编辑框

C++文件读写操作逐字符读取文本和逐行读取文本

怎么从InputStream流中逐行读取,即遇换行再读取

大数据量文本怎么通过adodb.stream逐行读取(VBS)

c语言逐行读取文件?

C++ 逐行读取文件,然后使用分隔符分割每一行