C++读取文本文件的特定部分

C++ reading specific parts of a text file

本文关键字:定部 文件 读取 取文本 C++      更新时间:2023-10-16

晚上好!

我将在这堂C++课上完成我的第一学期编程(完全是编程新手),并有一个期末项目。我们要做的是创建一个模拟社交媒体网络(类似于Facebook),在那里你可以注册、发帖、关注其他用户,以及其他类似的基本功能。

该项目背后的基本思想是将新信息写入并附加到文本文件中,并将其用作数据库。

我现在遇到的一个问题是,我发现只有当所有行的长度都相同时,才能读取文件的特定行。例如,当我想查看用户的公共信息(如姓名和职业)时,问题就出现了,因为我必须从特定的行中读取,但这些行可能包含不同长度的信息。例如,如果不同的用户关注不同数量的人,那么不是每一行都有相同数量的单词。

为了节省一些空间,到目前为止,我的项目有一个非常精简的框架代码:

项目.cpp(实施)

#include <iostream>
#include <string>
#include "project02.h"
using namespace std;
void Login()
{
    //login screen, if user chooses to sign up then it calls setUserInfo()
}
//includes setter and getter functions but I won't need to list them here

project.h(表头)

#ifndef PROJECT02_H
#define PROJECT02_H
using namespace std;
void Login();
class UserInfo
{
    //class for setting and getting user information
};

projectmain.cpp(主)

#include <iostream>
#include <string>
#include "project02.h"
using namespace std;
int main()
{
    Login();
    return 0;
}

这就是它的要旨。当一个新用户注册时,所有输入的用户信息都会附加到一个文件中以供以后使用。现在主要担心的是,当我以后必须阅读特定用户的信息时,如果它们的长度不同,我将无法阅读特定的行,所以我想知道是否有人对我如何使用这些功能提出建议。

任何见解都将不胜感激=)

编辑:我正在用ifstream读取文件。这是我唯一知道的方法。

您几乎已经发现了问题。由于您的问题没有明确的答案,请将我的提示作为起点:

  • 假设文件中的行是分开的,例如通过换行n,您当然可以读取文件的特定行。但是,您必须从文件的开头搜索整个文件,通过计算跳过的所有行来定位该行
  • 如果所有的行都有相同的公共长度,则可以计算文件中特定行开始的位置,然后读取它(参见seek())。然后,您可能需要一种方法来标记线条的长度,因为您要将较短的线条延伸到公共长度
  • 作为一种折衷方案,如果您将许多短行扩展到相当长的公共长度,从而浪费了昂贵的空间,则可以引入第二个索引文件。在该文件中,您只需存储,例如,指向实际数据文件的起始位置(数字)。索引(起始位置)可以都是相同的长度(与数据本身相比,它们很短),因此您可以轻松地在指数中找到特定的索引。然后使用它来查找实际数据
  • 你可以为你的文件使用某种结构。有很多,比如XML或JSON。然而,他们中的大多数人也会浏览文件来定位信息位
  • 有许多内联数据库库,如SQLite或BerkeleyDB