c++ 读取文本文件仅读取约 10000 行

问题描述 投票:0回答:1

我正在逐行读取文本文件。该文件由 196921 行组成,即大约 200.000 行。 (文件约为 65 MB)当我使用 std::getline 读取文件时,我只读入 9726 行。我不知道如何获取该文件的其余部分...

std::wifstream file(strImportfile);
file.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
std::wstring strLine;
int iCountRows = 0;
while (std::getline(file, strLine)) {
    ++iCountRows;
}
file.close();

变量 strLine 显示每行的正确数据,但是是的,我只得到文件的前 5%...

有人可以告诉我我在那里缺少什么吗?

文本文件看起来像这样(抱歉我必须模糊几乎所有内容) Import file probably CSV exported excel file

我已经检查了第 9726 行周围的行,但每行似乎与任何其他行相同(格式)。

这是我用来阅读此内容的更多代码。抱歉,但我必须在那里使用 MFC...

std::wifstream file(strImportfile);
file.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
std::wstring strLine;
int iCountRows = 0;
while (std::getline(file, strLine)) {
    ++iCountRows;
}
file.close();

file.open(strImportfile);
file.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));




CDatenbank db;
db.Open(strDatenbank);
if(!db.m_db.IsOpen())
{
    AfxMessageBox(_T("Datenbank konne nicht geöffnet werden"));
    return FALSE;
}

CStatusWaitDlg dlgWait;
dlgWait.ShowWaitDlg(_T("Bitte warten") , iCountRows);

//Lagerlängen bereinigen
//CDaoDeleteAll(db.m_pLagerlaenge);
int iRow = 0;
while (std::getline(file, strLine)) {
    CString sRowInfo;
    sRowInfo.Format(L"%i / %i", iRow, iCountRows);
    iRow++;
    dlgWait.SetMessage(L"Importing " + sRowInfo);
    dlgWait.StepWaitDlg();
    CString sLine = strLine.c_str();
        ...
  }
c++ getline wifstream
1个回答
0
投票

抱歉给大家带来不便。看来notepad++向我展示了问题...第9726行中的一个特殊字符,即使文件是utf-8编码也无法读取... 在记事本++中显示“所有”字符向我展示了该字符。

Special character

仍然感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.