【问题标题】:Include massive text file in C++ program在 C++ 程序中包含大量文本文件
【发布时间】:2018-01-18 03:33:43
【问题描述】:

我有一个逗号分隔的文本文件,其中包含几百万个条目。每 23 个条目后有一个换行符。我将把每一整行添加为向量的实例,将 23 个字段作为子向量的实例。因此,第一个实例将是 vec[0][0-22],然后是 vec[1][0-22],等等。

这个文件是我程序的一部分,需要用它编译。意思是,我不想额外提供文件并使用 ifstream 从单独的文件中读取数据。

我已经可以使用 ifstream 对数据进行排序,但现在我需要将原始数据集成到程序中,以便我可以一起编译。

我无法将这个以逗号分隔的大型文本文件制成一个长字符串,然后将其分隔为多个字段,因为某些字段中包含引号,引号之间也包含逗号。

示例:

  `19891656,PLANTAE,TRACHEOPHYTA,MAGNOLIOPSIDA,FABALES,FABACEAE,Zygia,ampla,(Benth.) Pittier,,,,,Pithecellobium amplum  |Pithecolobium brevispicatum  ,Jarendeua de Sapo,,,LC,,3.1,2012,stable,N
   19891919,PLANTAE,TRACHEOPHYTA,MAGNOLIOPSIDA,FABALES,FABACEAE,Zygia,biflora,L.Rico,,,,,,,,,VU,B2ab(iii),3.1,2012,stable,N
   2060,ANIMALIA,CHORDATA,MAMMALIA,CARNIVORA,OTARIIDAE,Arctocephalus,pusillus,"(Schreber, 1775)",,,,,Phoca pusilla,"Afro-Australian Fur Seal, Australian Fur Seal, Brown Fur Seal, Cape Fur Seal, South African Fur Seal",Arctocphale d'Afrique du Sud,,LC,,3.1,2015,increasing,N`

当我的程序运行时,它将从大量文本中获取数据,并且不需要使用带有外部文件路径的 ifstream。如何在我的程序中包含这个文本文件?有没有办法“包含”文本文件?如果我需要制作大量字符串,如何使用引号之间的逗号字段来执行此操作?我很乐意澄清这个问题中似乎含糊不清的任何部分,因为我真的很好奇如何才能完成这项工作。

从技术上讲,这个文本文件是一个 csv,但我很犹豫是否将 csv 作为标签包含在内,因为我认为人们会认为我正在寻找一个 csv 解析解决方案。

【问题讨论】:

  • “我很乐意澄清这个问题的任何部分”什么问题?
  • 我编辑了帖子,以明确的问题格式包含我的请求。
  • 如果您在 Windows 中工作,您可以将文件编译为资源。
  • 所以你想将它构建到你的可执行文件中,这样阅读它就不会被偷听?
  • 可能是this will help

标签: c++ database text include


【解决方案1】:

您可能需要编写一个脚本来将数据文件的每一行转换为记录结构的初始化程序,每个 lins 后带有一个尾随逗号 [如果您不想使用终止符条目(见下文),除了除了最后一行]。该脚本可能是特定于您的数据类型的。说,

12,Joe,,,YES -> MyType(12,"Joe",0,0,true),

然后#include 整个转换后的文件代替你的数据数组/向量元素初始化器,例如

MyType myData [] = 
{
#include "my_data_file_converted"
   MyType() //an optional terminal entry
};

当然 MyType 应该有构造函数来接受你的初始化序列。

【讨论】:

  • 编程对我来说还是相当新的,但是我在很大程度上理解了你的建议。无论如何我都计划学习 Perl,所以我将编写脚本,使用 Perl 将数据转换为向量初始化器列表格式作为下一步。我从来没有见过这样使用#include。我将尝试使用这样的文件。
猜你喜欢
  • 2013-10-26
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多