如何检查文本文件中的特定行是否以特定单词开头

时间:2016-11-12 06:15:33

标签: c++ qt

我有一个文本文件,我在其中写入磁盘分区中所有文件的路径。

WriteToFile::WriteToFile(QString path, QString data)
{
    path = "E:/Data.txt";
    QFile file(path);
    if ( file.open(QFile::Append) )
    {
        data += "\r\n";
        QTextStream stream( &file );
        stream << data << endl;
        qDebug() << "Writting: " << data;

    }
}

我只在文件中写入新路径。

void ScanDir::qDirIteratorScanner()
{
    // QString basePath;
    QDirIterator it(this -> basePath, QDir::Files, QDirIterator::Subdirectories);
    while (it.hasNext())
    {
        // QStringList paths;
        paths = scanned();
        QString path = it.next();

        qDebug() << "Collected : " << paths.size();

        if (!paths.contains(path)) {
            WriteToFile writeToFile(basePath, path);
            paths << path;
        }
        else {
            qDebug() << "Already put : " << path;
        }
    }

}

我预计有时我会开始扫描分区,但在完成扫描分区之前停止程序。我想通过附加&#34; LAST-SCAN-POINT&#34;来标记我上次停止的位置。到最后一个路径入口的开始(如果是新路径),或者最后if (!paths.contains(path)) (如果我在检查路径时是否终止了该程序已被插入文件)

如何检查文本文件中以 LAST-SCAN-POINT

开头的行

DATA.TXT

  

C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7010.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 / Plug-Ins / Layout /(对齐面板资源)/idrc_PNGA/7011.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7012.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7013.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7014.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7015.idrc
   LAST-SCAN-POINT C:/ Program Files / Adob​​e / Adob​​e InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7016.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7017.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7018.idrc
  C:/ Program Files / Adob​​e / Adob​​e InDesign CC   2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7019.idrc

3 个答案:

答案 0 :(得分:1)

如何使用QString::startsWith method?例如:

QString path = "LAST-SCAN-POINT C:/Program Files/Adobe/Adobe InDesign CC 2015/Plug-Ins/Layout/(Alignment Panel Resources)/idrc_PNGA/7016.idrc";

if(path.startsWith("LAST-SCAN-POINT ")) {

    qDebug() << "The path starts with 'LAST-SCAN-POINT '";
} else {
    qDebug() << "The path does not start with 'LAST-SCAN-POINT '!";
}

答案 1 :(得分:1)

只需在txt文件中搜索“LAST-SCAN-POINT”,就可以这样做:

int readFile(std::string path)
{
std::ifstream filestream(path);
std::string line;
char lsp[16];
int i = 0;
while (std::getline(filestream, line))
{
    std::stringstream linestream;
    linestream << line;
    linestream.get(lsp, 16);
    if (std::string(lsp) == "LAST-SCAN-POINT")
    {
        filestream.close();
        return i;
    }
    i++;
}
filestream.close();
return -1;
}

这将返回LAST-SCAN-POINT开启的行,如果不存在,则返回-1。

答案 2 :(得分:0)

只需使用QFile的 readLine 功能(此处为文档jqyoui-droppable plugin)一次读取一行,然后使用 startsWith函数 的QString,如Moe Abdul-Hameed所示

相关问题