C++ 在Qt中编辑文件

C++ 在Qt中编辑文件,c++,qt,file,file-io,C++,Qt,File,File Io,假设我有一些.csv文件,如下所示: 1,2,5,5, 0,5,6,9, 3,2,5,7, 1,2,3,6, 如何删除每行末尾的“,”符号 p.s. 例如,我知道如何清理行尾的空格-file.readLine().trimmed(),但如何对其他标志执行相同操作,我不知道。这对我很有用: #include <QCoreApplication> #include <QFile> #include <QIODevice> #include <QTextSt

假设我有一些.csv文件,如下所示:

1,2,5,5,
0,5,6,9,
3,2,5,7,
1,2,3,6,
如何删除每行末尾的“,”符号

p.s. 例如,我知道如何清理行尾的空格-
file.readLine().trimmed(),但如何对其他标志执行相同操作,我不知道。

这对我很有用:

#include <QCoreApplication>
#include <QFile>
#include <QIODevice>
#include <QTextStream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile inFile("input.csv");
    if(!inFile.open(QIODevice::ReadOnly))
        exit(1);

    QString newFileData;
    QTextStream in(&inFile);

    //Read file line by line until it reaches the end
    while(!in.atEnd())
    {
        QString line = in.readLine();
        newFileData.append(line);

        int positionOfLastChar = newFileData.length()-1;
        char lastChar = newFileData.at(positionOfLastChar).toLatin1(); //Returns the character bevore the last character
        if(lastChar == ',')
            newFileData.remove(positionOfLastChar, //Remove at the position of the previous character 
                1                                  //one character
                );                      
        newFileData.append('\n');                  //Append the newline again, because in.readLine() ignored it
    }

    inFile.close();

    QFile outFile("output.csv");
    if(!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
        exit(1);

    //Write the data to the output file
    QTextStream out(&outFile);                    
    out << newFileData;
    outFile.close();

    return a.exec();
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QFile infle(“input.csv”);
如果(!infle.open(QIODevice::ReadOnly))
出口(1);
QString新文件数据;
QTextStream-in(&infle);
//逐行读取文件,直到到达末尾
而(!in.atEnd())
{
QString line=in.readLine();
newFileData.append(行);
int positionOfLastChar=newFileData.length()-1;
char lastChar=newFileData.at(positionOfLastChar.toLatin1();//返回最后一个字符之前的字符
如果(lastChar==',')
newFileData.remove(LocationOfLastChar,//在前一个字符的位置处移除
1//一个字符
);                      
newFileData.append('\n');//再次追加换行,因为in.readLine()忽略了它
}
infle.close();
QFile输出文件(“output.csv”);
如果(!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
出口(1);
//将数据写入输出文件
QTextStream out(&outFile);

你也可以用另一种方法来制作。你可以逐行阅读这篇文章到vector
。然后你可以在一个循环中调用你的all vector,你可以删除vector的
最后一项。如果你愿意,你可以将你的vector写入txt文件。然后,你的“,”将被删除。

这是另一种方法,不需要将整个文件存储在内存中。它还显示了控制台应用程序如何处理错误手术室

#include <QCoreApplication>
#include <QStringList>
#include <QFile>
#include <QTextStream>
#include <cstdio>

QTextStream err(stderr);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    if (a.arguments().length() != 3) {
        err << "Usage: " << a.arguments()[0] << " infile outfile" << endl;
        return 1;
    }
    QFile fin(a.arguments()[1]), fout(a.arguments()[2]);
    if (! fin.open(QIODevice::ReadOnly)) {
        err << "Can't open input file: " << fin.fileName() << endl;
        return 2;
    }
    if (! fout.open(QIODevice::WriteOnly)) {
        err << "Can't open output file: " << fout.fileName() << endl;
        return 3;
    }
    QTextStream in(&fin), out(&fout);
    while (!in.atEnd()) {
        QString line = in.readLine().trimmed();
        if (line.endsWith(",")) line.truncate(line.length()-1);
        out << line << "\n";
        if (in.status() != QTextStream::Ok) {
            err << "Error while reading." << endl;
            return 4;
        }
        if (out.status() != QTextStream::Ok) {
            err << "Error while writing." << endl;
            return 5;
        }
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
QTextStream错误(stderr);
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
如果(a.参数().长度()!=3){

err假设您已经知道如何逐行阅读,这种粗略的方法是有效的:

QString testStr = QString("1,2,5,5,");

QStringList testList = testStr.split(",");
qDebug() << "testList" << testList;

testList.removeLast();
qDebug() << "testList" << testList;

testStr = testList.join(",");
qDebug() << "testStr" << testStr;

没问题。请给我几分钟。:)
testList ("1", "2", "5", "5", "") 
testList ("1", "2", "5", "5") 
testStr "1,2,5,5"