.txt文件到C++中的结构数组

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

本文关键字:结构 数组 C++ 文件 txt      更新时间:2023-10-16

我以前用过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文件的书号等。

我整天都在寻找潜在的解决方案,并且研究了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

并看到输出是您可能期望的。

现在当然,将 cin>> num; 更改为 cin>>书单[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等)。