在 C++ Builder 中获取文本文件的第二行
Get the second line of a Text File in C++ Builder
我的文本文件如下所示
Fruit
Vegetable
我需要 return Vegetable
的功能
这是我尝试使用并获得“Vegetable”的代码:
String getItem()
{
ifstream stream("data.txt");
stream.ignore ( 1, '\n' );
std::string line;
std::getline(stream,line);
std::string word;
return word.c_str();
}
然后我这样做是为了尝试将第二行放入编辑框中:
void __fastcall TMainForm::FormShow(TObject *Sender)
{
Edit1->Text = getItem();
}
出于某种原因,当我 运行 代码编辑框最终什么也没有,完全空白。
istream::ignore()
的第一个参数用字符表示,而不是行。因此,当您调用 stream.ignore(1, '\n')
时,您只会忽略 1 个字符 (即 Fruit
的 F
),而不是 1 行.
要忽略整行,需要传入std::numeric_limits<streamsize>::max()
而不是1
。这告诉 ignore()
忽略所有字符,直到遇到指定的终止符 ('\n'
)。
此外,您 return
是一个空白 String
。您忽略了用 std::getline()
.
阅读的 line
试试这个:
#include <fstream>
#include <string>
#include <limits>
String getItem()
{
std::ifstream stream("data.txt");
//stream.ignore(1, '\n');
stream.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::string line;
std::getline(stream, line);
return line.c_str();
// or: return String(line.c_str(), line.size());
}
我的文本文件如下所示
Fruit
Vegetable
我需要 return Vegetable
这是我尝试使用并获得“Vegetable”的代码:
String getItem()
{
ifstream stream("data.txt");
stream.ignore ( 1, '\n' );
std::string line;
std::getline(stream,line);
std::string word;
return word.c_str();
}
然后我这样做是为了尝试将第二行放入编辑框中:
void __fastcall TMainForm::FormShow(TObject *Sender)
{
Edit1->Text = getItem();
}
出于某种原因,当我 运行 代码编辑框最终什么也没有,完全空白。
istream::ignore()
的第一个参数用字符表示,而不是行。因此,当您调用 stream.ignore(1, '\n')
时,您只会忽略 1 个字符 (即 Fruit
的 F
),而不是 1 行.
要忽略整行,需要传入std::numeric_limits<streamsize>::max()
而不是1
。这告诉 ignore()
忽略所有字符,直到遇到指定的终止符 ('\n'
)。
此外,您 return
是一个空白 String
。您忽略了用 std::getline()
.
line
试试这个:
#include <fstream>
#include <string>
#include <limits>
String getItem()
{
std::ifstream stream("data.txt");
//stream.ignore(1, '\n');
stream.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::string line;
std::getline(stream, line);
return line.c_str();
// or: return String(line.c_str(), line.size());
}