2017-01-21 2 views
-1

私はこれまでC++を使用していましたが、私はプロではないとはっきり言えます。一般的なコーディングでさえそうではありません。私はそれがそれのように見えないかもしれないほど努力しています。 :/.txtファイルをC++の構造体の配列にコピーするには?

私の仕事は、タイプ "book_list"の構造体の配列を作成することです。

構造体は次のようになります。

struct book_list 
{ 
    int bookNumber; string bookTitle; string bookAuthor; 
    string bookDescription; int bookMonth; int bookYear; int bookRating; 
}; 

それは、配列自体を作成するために十分に簡単です:

プログラムがすることを意図している:私は悩みを抱えているのはここ

book_list myBookList[50]; 

です.txtファイルを検索します。それが見つかると、ファイル内のすべてのデータを構造体の配列に読み込みます。だから、.txtファイルのbookNumberなどのbookNumber

私は一日中解決策を探していました。私はifstream、getline、イテレータなどのアイデアを調べました。私の研究は散在しています私の脳のように、私は少し困惑していると思う。

さらに詳しい情報が必要な場合は、私にお知らせください。

おかげで、

-Jon

+0

まず、ファイル内に定義された構造が必要です。もしあなたがそれを持っていれば、それを解析し、最終的にあなたのデータ構造をメモリに構築することができます。ステップバイステップ); –

+0

返信ありがとうございました すみません、すぐに返信することはできません。仕事に行く必要がありますが、あなたはここにいました。 ( もう一度お返事ありがとうございます。 -Jon – Werewoof

答えて

0

あなたはそれを解析、その後に読んで/個別に各エントリを解析したり、ファイル全体を読み取るためにどちらかが必要です。とにかく、すべての構造体をメモリに格納しているので、一度に1つずつ読むのは気にしたくない場合はおそらく後者ですが、教育目的のために一度に1つずつ読み込んでみるとよいでしょう。たぶん行ごとに分かれていますか?

次に、エントリを解析する方法が必要です。これを行う方法はありませんが、主にJSON形式のテキストファイルを使用するのが最も簡単です。これは主に、それを使用できるライブラリとそれを視覚化するのに役立つツールがあるためです。 JSONを使用すると、辞書、配列、文​​字列、数値、ブール値を表すことができます。ネストされた構造のように空想的なものがないので、手作業で手作業で行うことも、このようなライブラリを使ってJSONを解析することもできます:https://github.com/DaveGamble/cJSON (C言語では、C++とリンクする必要がありますifあなたは、C++を使用したい)

+0

私はこれがうまくいくと思いますが、まずこれを行う方法を理解する必要があります。私はこのようなもので少し威圧しています笑) 私はそれができるときにそれを調べますので、あなたのコメントのためにあなたに感謝! – Werewoof

+0

GitHubまたは何かからライブラリを使用することは威圧することができますが、それは通常報われる、cJSONは非常に使いやすいです – sudo

0

質問のように製剤化することができると仮定すると:あなたは私に私の練習をキックスタートできる小さなプログラミング例を与えることができ

プログラムP:

#include <iostream> 
    using namespace std; 

    int main() { 
    int num; 
    string buf; 
    while (true) { 
     cin >> num; if (cin.eof()) break; 
     cin >> buf; if (cin.eof()) break; 
     cout << "num is: " << num << " buf is: " << buf << endl; 
    } 
    } 

テキストをファイルt.txt

1 
    one 
    2 
    two 

あなたは

t.txt

P <を実行し、出力は、おそらく期待したものであることがわかります。

もちろん、cin >> numを変更してください。 into cin >>ブックリスト[0] .bookNumber;あなたの運動は適切な軌道に乗っています。

0

には<stdio.h>を使用してください。

char *name; 
FILE *file; 
name = "database.txt"; 
file = fopen(name,"w+"); 
book_list myBookList[50]; 

これは書き込み時に使用します。

book_list newRecord; 
newRecord.bookNumber = 0; 
//other assignments 
fseek(file,0,SEEK_END); 
fwrite(&newRecord,sizeof(book_list),1,file); 
fclose(file); 

下記の使用を読んでいる間。

file = fopen(name,"r+"); 
book_list record; 
fseek(file,0,SEEK_SET); 
int i=0; 
while(true){ 
    fread(&record,sizeof(book_list),1,file); 
    if(feof(file)) 
     break; 
    myBookList[i].bookNumber = record.bookNumber; 
    //other assignments 
    i++; 
} 
fclose(file); 

注:私は、これは文字列class.Iで正常に動作しているかわからないchar[SIZE]strcpyでこれを使用しています。私の提案は、最初にint, float, charなどの組み込み型を試してみることです。

+0

これはCにとっては便利だが、慣用的なC++のアプローチでは、通常は代わりに 'ifstream'を使うだろう。 –

+0

@JustinTime私は通常CとC++を分けていない。あなたが正しいと気付かないでください。 – volvox

関連する問題