2016-11-30 9 views
0

GUIのline_editから読み込んでファイルに書き込むコードを書いた。コードは行編集からテキストを読み込んでファイルに書きますが、スペースを入れずに連続して印刷されていますので、行編集で書かれたテキストを別の行に出力したいと思います。ファイルにはテキストが書かれており、各行の最初の単語をユーザーが入力した単語で置き換えたいだけです。QT、新しい行をファイルに書き込む

コードは、ファイルに書き込むために:私たちが書きたくなる

void MainWindow::on_write_btn_clicked(){ 
    QString str, str2, lin; 
    str = ui->lineEdit->text(); 
    str2 = ui->lineEdit2->text(); 
    QFile file1("sample.txt"); 
    if(file1.open(QIODevice::ReadWrite | QIODevice::Text)){ 
     QTextStream out(&file1); 
     out << str; 
     lin = out.readLine(); 
     out << str2; 
     file1.seek(30); 
     file1.close(); 
    } 
    else 
     return; 
} 

ファイル: file in which we want to write

+1

コードをスクリーンショットの代わりにコードとして記述してください。 –

+0

私は手伝っていますが、ファイアウォールがサイトへのアクセスをブロックしています。 **あなたのプログラムの**テキスト**で投稿を**編集してください。 –

+0

'QIODevice :: Append'を使ってファイルを開き、' '\ n''の後ろにデータを追加します –

答えて

1

を使用すると、次の文字列がファイルに新しい行になりたい場合は、追加する必要があります新しい行の文字をストリーム\nに渡します。あなたのコードを参照する あなたが置く必要があります。

strstr2の内容は連続した行に表示されてしまい
out << str << '\n' << str2; 

を。代わりに上記の

QTextStreamからendlマニピュレータを使用することができます。このため

out << str << endl << str2; 

を正しく動作させるにあなたが QIODevice::Textでファイルを開き、 endlあなたが指定されているが、実際にから来ていることを保証する必要があります QTextStreamstdではない) ファイルを書きたいだけなので、 ReadWriteオプションで開く必要はありません。 WriteOnlyで十分です。さらに詳細に応じ

EDIT

では、次の操作を行うことができ、ファイルの各行から最初の単語を置換します。 2つのファイルを開きます.1つは読み込まれ、もう1つは変更されたデータを書き込みます。すべての行がファイルを閉じるけれども、元のファイルを取り除き、出力ファイルの名前を変更して元のファイルを置き換えます。サンプル実装:もちろん

QFile fileIn("textIn.txt"), fileOut("textOut.txt"); 
fileIn.open(QFile::ReadOnly); // check result 
fileOut.open(QFile::WriteOnly); // check result 

QTextStream streamIn(&fileIn), streamOut(&fileOut); 
const QChar delimeter = ' '; 
while (!streamIn.atEnd()) 
{ 
    QStringList list = streamIn.readLine().split(delimeter); 
    if (list.size() > 0) // in case of empty line 
     list[0] = "substitutedText"; // here put the text you want to set 
    streamOut << list.join(delimeter) << "\r\n"; // or endl 
} 
fileIn.close(); 
fileOut.close(); 

fileIn.remove(); // check result 
fileOut.rename(QFileInfo(fileIn).absoluteFilePath()); // check result 

あなたは、元のファイルReadWrite修飾子で開かれ、seekを使用して、ストリーム内の適切な位置を設定することで、交換をやってみてください。それは、読み書きされたデータの長さが異なるため、扱いにくくなる可能性があります。

+1

実際に 'endl'それは' '\ n''と同じですhttp://doc.qt.io/qt-5/qtextstream.html#endl – bibi

+0

情報ありがとうございました、私はドキュメントから 'note'を誤解したに違いありません。回答はすでに編集済み – Dusteh

+0

あなたの提案をありがとう、私は '\ n'を使ってコードを実行しようとしましたが、単語は次の行に印刷されましたが、単語に続く文も次の行に移動しました。私はちょうどファイルの各行の最初の単語を置き換えたいと思った。 – sanjoli

関連する問題