如何有效地读取和存储1GB文本文件中的数据?

时间:2018-05-06 13:05:22

标签: c++ data-structures

我有一个CSV文件,其中包含大约1GB的数据。该数据有484,000行和60列。我必须通过阅读文件回答一些问题,但是数据非常大,我必须有效地管理内存。有没有一种有效的方法来存储数据?如果我必须将数据存储在数据结构中,哪种数据结构可以有效地存储/管理数据?

我必须用C ++编写代码。文本文件具有主要使用字符串操作的数据。我使用Windows作为平台。该文件存在电信公司的网络错误。存储的数据包含网络故障,基于这些故障,我必须回答一些问题。

数据有点像这样:

  

** “标识符”, “CLEARANCEREPORTFLAG”, “ESCALATEDALARM”, “ACKNOWLEDGEMENTUSERIDE”, “HANDLEDBY”, “CLOSEDBY”, “HANDLEDUSERIDENTIFIER”, “RELEASEUSERIDENTIFIER”, “CLOSEUSERIDENTIFIER”, “TERMINATIONUSERIDENTIF”, “ACKNOWLEDGEMENTTIMESTA”,” HANDLETIMESTAMP”, “CLOSETIMESTAMP”, “TERMINATIONTIMESTAMP”, “RELEASETIMESTAMP”, “CREATIONTIMESTAMP”, “ARCHIVETIMESTAMP”, “CLEARANCETIMESTAMP”, “MANAGEDOBJECT”, “TARGETENTITIES”, “ALARMTYPE”, “EVENTTIME”, “相当理由”, “SECURITYALARMCAUSE” “SPECIFICPROBLEMS”, “BACKEDUPSTATUS”, “BACKUPOBJECT”, “TRENDINDICATION”, “THRESHOLDINFO”, “NOTIFICATIONIDENTIFIER”, “CORRELNOTIFINFO”, “STATECHANGEDEFINITION”, “MONITOREDATTRIBUTES”, “PROPOSEDREPAIRACTIONS”, “RULENAME”, “域”,” SECURITYALARMDETECTOR”, “EXPORTSEQUENCENAME”, “EXPORTSEQUENCENUMBER”, “OCNAME”, “AlarmClass报警”, “ALARMORIGIN”, “PARENTALARMOBJECT”, “ALARMCOMMENT”, “AGENTALARMIDENTIFIER”, “AGENTENTITY”, “PERCEIVEDSEVERITY”, “ADDITIONALTEXT”, “ALARMOBJECTOPERATORNO” “ORIGINALSEVERITY”, “ORIGINALEVENTTIME”, “UserIdentifier的”, “USERTEXT”, “OUTAGEFLAG”,“PROBLEMO CCURRENCES”, “CRITICALPROBLEMOCCURRE”, “MAJORPROBLEMOCCURRENCE”, “MINORPROBLEMOCCURRENCE”, “WARNINGPROBLEMOCCURREN”, “INDETERMINATEPROBLEMOC”, “CLEARPROBLEMOCCURRENCE”, “SATOTAL”, “EMS_DOMAIN”, “EMS_VENDOR”, “EMS_REGION”, “EMS_LOCATION”, “FRIENDLY_NAME” “NATIVE_CAUSE”

     

“49487171”, “1”, “0”, “”, “”, “”, “”, “”, “自动清除”, “自动清除”, “”, “”,“8 /二千〇一十三分之一   5:06:24 AM“,”2013年8月2日3:28:49 AM“,”“,”2013年8月2日上午3:28:41“,”2013年8月2日   5:06:24 AM“,”2013年2月2日上午3:51:09“,”HW_T2000_Sys   ihvtfs01_ns:.T2000_Rawalpindi_06 Managed_Element“”33554504“”PTP   “”/ rack = 1 / shelf = 591070 / slot = 11 / domain = wdm / port = 1“”CTP   “”/ och = 1“”“,”1349806175“,”CommunicationsAlarm“,”2013年8月2日3:51:09   AM “ ”LossOfSignal“, ”“, ”299340460“, ”“, ”“, ”“, ”“, ”“, ”“, ”“, ”“, ”“, ”“,” 域名   ihvtfs01_ns:.National_Tx_Huawei_dm “ ”“, ”导出“, ”1“, ”ihvtfs01_ns:.Nat_Tx_Huawei“, ”0“, ”0“, ”“, ”“, ”“, ”“, ”主要“,” @优先级= 20 @ FC = FC.TXM.KHI @ Outage_Flag = @ NE_Name =卡拉奇   MRD:乙@ USER =:地址:   T2000_Rawalpindi_06; 33554504; /机架= 1 /搁板= 591070 /时隙= 11 /域= WDM /端口= 1; / OCH = 1   native ProbableCause = SM_BIP8_OVER,service   影响= SA_NON_SERVICE_AFFECTING,nativeEMS   名称= T2000_Rawalpindi_06;卡拉奇MRD; / rack = 1 / shelf = 1246-KHI MRD 2-2 to   P / C / slot = 11 / domain = wdm / port = 1; / och = 1,additionalInfo =   AlarmSerialNo = 91292009; AlarmReason = OTU层SM部分的报警   错误阈值交叉; ProductName = OptiX BWS1600G;   EquipmentName = ETMXS; AffirmState = FALSE; DetailInfo =报警   参数(十六进制):0x01 0x00 0x01 0xff 0xff; ,EMS   T2000_Rawalpindi_06 ManagedElement 33554504 PTP   / rack = 1 / shelf = 591070 / slot = 11 / domain = wdm / port = 1 CTP   / och = 1 @#@ 1-282 @#@ BER_SF @#@ 40 Link   INFO:T2000_Rawalpindi_06;卡拉奇   MRD; / rack = 1 / shelf = 591070 / slot = 11 / port = 1; / och = 1 Link   INFO1(wdm):T2000_Rawalpindi_06;卡拉奇MRD; / rack = 1 / shelf = 1246-KHI MRD   2-2到P / C / slot = 11 / domain = wdm / port = 1; / och = 1 NE_Lookup:卡拉奇   MRD__Karachi MRD; / rack = 1 / shelf = 1246-KHI MRD 2-2 to   P / C / slot = 11 / domain = wdm / port = 1; / och = 1 @ AEnd = EMS T2000_Rawalpindi_06   Managed_Element卡拉奇MRD PTP   /机架= 1 /搁板= 591070 /时隙= 11 /域= WDM @的Zend = @ SERVICE = ::   %%% EMS_DOMAIN =传输@ EMS_VENDOR =华为@ EMS_REGION =国家@ EMS_LOCATION = OFS   Hall,S / Town @ FRIENDLY_NAME = T2000_Rawalpindi_06;卡拉奇   MRD; / rack = 1 / shelf = 1246-KHI MRD 2-2 to   P / C /时隙= 11 /域= WDM /端口= 1; / OCH = 1; ETMXS @ NATIVE_CAUSE = SM_BIP8_OVER +++ “ ”“, ”主要“,” 2013年8月2日   3时51分03秒   AM “ ”“, ”“, ”“, ”1“, ”0“, ”1“, ”0“, ”0“, ”0“, ”1“, ”1“, ”传输“,” 华为“ ”全国“,” OFS   Hall,S / Town“,”T2000_Rawalpindi_06;卡拉奇MRD; / rack = 1 / shelf = 1246-KHI   MRD 2-2到P / C / slot = 11 / domain = wdm / port = 1; / och“,”SM_BIP8_OVER“**

这是前两行的数据。第一个类似于存储数据的标题,第二行中的数据是表示故障的实际数据。现在我必须回答诸如特定地区发生了多少次故障等问题。

1 个答案:

答案 0 :(得分:0)

如果你有足够的RAM,你可以将所有字符串存储到一个巨大的数组中,然后为存储指向字符串的指针的每一行创建一个结构。 这些结构放在一个数组中,然后您可以按列进行排序。

如果您想最大限度地减少RAM使用,您可以再次针对每个问题阅读整个文件。这样,您只需将数据存储在当前问题所需的RAM中。