1

以前にJavaで行った小さなプログラムを作成していますが、C ++でも同じように動作させたいと思っています。アイデアは、2 つのテキスト ファイルをマージすることです。

ファイル1:

a
b
c

ファイル2:

1
2
3

出力ファイルは次のようになります。

a1
b2
c3

私は QTextStream docs を見てきましたが、これはファイルを行ごとに文字列に読み取るための提案されたコードでした

QFile file(input); // this is a name of a file text1.txt sent from main method
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
    return 1;
}
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull())
{
    line = in.readLine();
}

しかし、何らかの理由で、ファイルから何もロードされていません。「行」をコンソールに出力することでこれを証明しましたが、何も得られませんでした。

アイデアはありますか?私が望むのは、ファイルを読み取って、このような文字列になることだけです

QString text1 = "a\n2\n3"

私は両方のファイルに対してこれを行い、文字列を QStringList に分割し (ほとんどの場合)、必要な形式でそれらを結合し、3 番目の txt ファイルに書き込みます。

4

3 に答える 3

7

ファイル全体が必要なのに、なぜ1行ずつ読み取るのですか?

QString line = in.readAll();

また、whileループが間違っているwhile (!in.atEnd())場合は、文字列がnullかどうかを確認するのではなく、テキストストリームを処理する必要があります。

readLine改行記号は含まれません。

とにかく、分割して結合するよりも、両方のファイルを同時に開いて、外出先で文字列を作成する方がはるかに簡単です。

QFile f1("h:/1.txt");
QFile f2("h:/2.txt");

f1.open(QIODevice::ReadOnly | QIODevice::Text);
f2.open(QIODevice::ReadOnly | QIODevice::Text);

QString s;

QTextStream s1(&f1);
QTextStream s2(&f2);

for (int i = 0; i < 3; ++i) {
    s.append(s1.readLine());
    s.append(s2.readLine());
    if (i != 2)s.append("\n");
}
于 2013-02-27T15:31:10.713 に答える
1

ファイル名にフル パスが含まれていないが、ファイルがアプリケーションと同じディレクトリにあることが確実な場合は、次のようにアプリケーション パスを使用します。

QString filename = QCoreApplication::applicationDirPath() + "/" + input;
于 2013-02-27T15:50:55.097 に答える
0

このブロックを試してください-:

while(!in.atEnd())
{
   QString line = in.readLine();   
   ....
}

このwhileループを使用して出力を取得しますか?

于 2013-02-27T15:31:24.147 に答える