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

时间:2015-12-06 07:12:15

标签: c++ text-files ifstream

晚上好!

我正在完成我在这个C ++课程中的第一个学期编程(完全是编程新手)并且有一个最终项目。我们被要求做的是创建一个模拟社交媒体网络(类似于Facebook),您可以在其中注册,发帖,关注其他用户以及其他此类基本功能。

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

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

到目前为止,这是我项目的一个非常简洁的骨架代码,以节省一些空间:

project.cpp(implementation)

#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(main)

#include <iostream>
#include <string>
#include "project02.h"

using namespace std;

int main()
{
    Login();
    return 0;
}

这就是它的要点。当新用户注册时,所有输入的用户信息被附加到文件中以供以后使用。现在主要关注的是,当我以后必须阅读特定用户的信息时,如果它们的长度不同,我将无法读取特定的行,所以我想知道是否有人有关于我如何能够的建议在考虑到这些功能的情况下处理这个项目。

任何见解都会非常感激=)

编辑:我正在使用ifstream阅读文件。这是我知道怎么回事的唯一方式。

1 个答案:

答案 0 :(得分:0)

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

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