簡體   English   中英

.txt 文件到 C++ 中的結構數組?

[英].txt file to an array of structures in C++?

我以前使用過 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 文件。 如果找到它,它將把文件中包含的所有數據讀入結構數組。 因此,bookNumber 與 .txt 文件的 bookNumber 等。

我一整天都在尋找可能的解決方案,我研究了ifstream、getline、使用迭代器等想法。我的研究和我的大腦一樣分散,我覺得我有點難住了。

請幫助,如果您需要任何進一步的信息,請告訴我!

謝謝,

-喬恩

您需要單獨讀取/解析每個條目或讀取整個文件然后解析它。 由於您無論如何都將所有結構存儲在內存中,如果您不想一次讀取一個,后者可能沒問題,但出於教育目的,您可能想嘗試一次讀取一個。 也許用線分開?

然后您需要一種解析條目的方法。 沒有一種方法可以做到這一點,但最簡單的方法可能是使用 JSON 格式的文本文件,主要是因為有可以使用它的庫和可以幫助將其可視化的工具。 JSON 允許您表示字典、數組、字符串、數字和布爾值。 您可以不費吹灰之力地手動執行此操作,因為您沒有像嵌套結構這樣的花哨的東西,或者您可以使用這樣的庫為您解析 JSON: https : //github.com/DaveGamble/cJSON (在C,如果你想使用 C++,就必須與 C++ 鏈接)

假設問題可以表述為:
你能給我一個可以啟動我的練習的小編程示例嗎:

程序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

你可以跑

p < t.txt

並查看輸出是否符合您的預期。

現在當然改變cin >> num; 進入cin >> booklist[0].bookNumber; 等等,你的鍛煉就會走上正軌。

<stdio.h>用於FILE

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);

注意:我不確定這是否與字符串類一起正常工作。我已將其與char[SIZE]strcpy 我的建議是首先嘗試使用內置類型,如int, float, char等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM