この質問は本当にかなりの数に依存します。テキストファイルから抽象化する情報に対して何が計画されているか。別のテキストファイルに出力し、テキストオブジェクト機能(QTextEdit、QLineEditなど)を備えたウィジェットに表示し、データベースに送信し、ある種の用途に使用しますか(つまり、重複するエントリを削除するか、行間隔を区切る/削除する)?問題のテキストファイルは行で折り返されていますか?各行の文字数、つまりビット数。
私は多くの理由でこれを言います。ご存知のとおり、QtはMeta-Object-Compilerと広範なマクロでC++言語を強化します。マクロがプログラムテキストをコンパイラが実際に見る前に再配置するという点で、C++プログラミングの基本に戻ります。Qtでは、これはテキストオブジェクトとテキストオブジェクトに送信するファイルI/Oで何よりも真実であることがわかりました。繰り返しますが、アプリケーションをどのように設計したかによって異なります。Bjarneのアドバイスに従い、「必要なクラスを決定し、各クラスの操作の完全なセットを提供し、継承を使用して共通性を明示します。そのような共通性がない場合は、データの抽象化で十分です。」
これを述べたので、実行時エラーが発生したか、コンパイル中またはコンパイル後にアプリケーションが予期せずクラッシュ/終了した可能性があります。つまり、プログラム/アプリケーションをデータフローのカウントに書き直す必要があります。
テキストファイルからのデータが必要な場合は、バイナリ検索アルゴリズムのようにテキストを検索/並べ替えて、そのような1つの配列を使用して比較することはできません。テキストオブジェクトにすべての名前を表示してそれらを検索する場合は、以下に示すように、QScrollAreaとQTextEditを作成し、QTextEditをQScrollAreaに追加することをお勧めします。
scrollArea = new QScrollArea(this);
textEdit = new QTextEdit("",this);
textEdit -> setGeometry(QRect(QPoint(150, 50), QSize(400,20000)));
scrollArea -> setGeometry(QRect(QPoint(150, 50), QSize(400,300)));
scrollArea -> setWidget(textEdit);
*注:テキスト編集のサイズは、ウィンドウのサイズをはるかに超えて設定できます。12フォントで少なくとも1000行??。20000で、ラインマージンを含めるために南北に4ポイントあります。
scrollareaとtexteditの両方が親オブジェクトクラスで作成されている場合は、ファイルを読み取り、readLineの代わりにreadAllを使用して、textEditに表示します。1000行の行編集は大規模です!! 繰り返す必要はありません。QFile::ReadOnlyを使用して説明しているような場合は十分です。親オブジェクトのクラス(つまりメインウィンドウ)で説明されていることを実行すると、行の編集によってファイルを読み取るvoid関数が作成され、次のように表示されます。
textEdit->setPlainText(line);
次に、mainWindow関数の下部にある関数を呼び出すだけです。説明されているように、文字列を結合する配列を作成しても意味がありません。私が説明したものを使用して、小さな3〜5行の関数を使用して、それらをはるかに簡単に編集できる場合。
このアプリケーションが使用できず、公開したい場合:これには、関数による計算とデータの抽象化、および配列入力後のテキストオブジェクトとの間の入力が必要になる可能性があります。この場合、コンテナQStringListを作成し、ファイルを閉じた後、以下に示すようにqFillアルゴリズムを使用します。
QList<QString> Lstring(lineNumbers); //line numbers is the size of strings per line
qFill(Lstring, peoples.size());
foreach(QString item, Lstring){
textObjectOfChoice -> setText();
}
私は個人的にQStringListを使用し、メインウィンドウのクラスでfalse(off)に設定されたブール関数を作成し、アプリの実行が開始されるとすぐにint main {}で作成します。もちろん、メインウィンドウまたはダイアログオブジェクトは作成されたオブジェクトでドットセパレーターを呼び出し、パラメーターにtrueを渡して、ファイルのロードを1回オンにします。次に、w.show();を呼び出した後。再帰的にapp.exec()を返す前に、同じドット区切り関数を呼び出してから、値をfalseに渡します。注:スプラッシュ画面はこれに役立ちます。私は個人的には、スプラッシュクリーンなしで50万語、250万文字にすぎません。アプリケーションで個人的に作成したクラスの数によっては、さらに長くなる可能性があります。以下は、呼び出される関数の例です。
void WordGame::fileStart(bool load){
start = load;
if (start){
QFile myfile(":/WordGame/WordGame/TheHundredGrand.txt");
if(myfile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QString line;
QTextStream stream(&myfile);
int index = 0;
int length = 0;
do
{
line = stream.readLine();
arryOne[index] = line;
listOne << arryOne[index];
index++;
length++;
}while(index<109582);
stream.flush();
myfile.close();
}
}
}
メインでは、WordGameのメインウィンドウクラスは次のように呼び出されます。boolload = true; WordGame w; w.fileStart(load);
w.show();
w.fileStart(!load);
return app.exec();
これはもちろん、qrcソースファイルで参照していた単語リストがあります。アプリの最初のインスタンスが呼び出された後に終了するアルゴリズムのファイルロード部分を作成しない場合、リストはそれ自体を繰り返して拡張し続けます(標準の入出力を持つすべてのc / c ++アプリケーションはそれ自体が再帰的であるため、 app.exec)。最初のリスト作成の機能外の別のリストにデータを抽象化して(元のリストが解析されることを意味します)、元のリストと比較できるようにします。たとえば、すでに回答済み、以前に回答済み、以前に検索されたなどは、テキストオブジェクトの量に基づいた最も賢い動き。ユーザー入力の別のリストを作成してから、最初のリストとユーザー入力のリストを繰り返すのが最善です。私はこのようなものを使用します:
QStringList::iterator i3 = qFind(userInputList.begin(), userInputList.end(), word);
QStringList::iterator i2 = qFind(listOne.begin(), listOne.end(), word);
上記のイテレータでは、ユーザーエントリが初期データセットと一致するかどうかを確認し、他のイテレータはユーザーの以前の入力に対して検索します。
注:C ++またはJavaの関数またはメソッドは、30行以下のデータ(空でない行)である必要があります。テキストオブジェクト機能(つまりlineEdit)を備えたウィジェットからデータを繰り返し抽象化して入力し、それらに対して計算を実行すると、説明されているようにファイルを頻繁に開くと、後で問題が発生する可能性があります。また、file.closed()操作が別の関数に対して完了した後、connectステートメントが正しいように見えます。または、ブール関数の使用done = true; 率直に言って、Qt / Cpp(またはそのことについては任意の言語)で大規模で堅牢なソフトウェアを開発するための最良の方法は、バイナリ(0または1)のtrueまたはfalseの関数/メソッドの完了です。使用法によっては、qrcファイルを作成してテキストファイルをファイルとして追加することも重要な場合があります。データコンテナを埋めるために一度だけ開いたり閉じたりすることは、メインイベントループから抜け出す方法です。Qstringlistを使用すると、メモリダンプが実行されるまでリストが継続的にいっぱいになり、アプリケーションが失敗する可能性があります。これを回避するには、リストの各インデックス位置に対して「」をnullとして逆反復するように、追加の「list-reset」関数を使用します。ユーザーがEnterボタンなどを押すと、開発中のものは何でも、TextStreamオブジェクトを含む関数を自動的に呼び出しますか?リストの各インデックス位置に対してnullとして「」を使用する逆反復のようなものです。ユーザーがEnterボタンなどを押すと、開発中のものは何でも、TextStreamオブジェクトを含む関数を自動的に呼び出しますか?リストの各インデックス位置に対してnullとして「」を使用する逆反復のようなものです。ユーザーがEnterボタンなどを押すと、開発中のものは何でも、TextStreamオブジェクトを含む関数を自動的に呼び出しますか?
PS本当にそれについて正義になりたいのなら、8ビットスタイルのような本当に古い学校でそれを行うことができます。*テキストファイルがどうなるかを永続的に知っていて、不変だった場合。そして、(それは何ですか?)int array [97]を作成します。これは、すべてのアルプラヌメリック、大文字、特殊文字/句読点が配列の1つのインデックス位置に等しいことです。たとえば、1つの整数は1つの文字に等しく、たとえば[0] = a、[1] = b、[26] = Aであり、各行の各文字の位置をカウント/グラフ化する文字オカレンスプログラムを作成します。その特定の単語ファイルまたはテキストファイルの統計があります。