我有一个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“**
这是前两行的数据。第一个类似于存储数据的标题,第二行中的数据是表示故障的实际数据。现在我必须回答诸如特定地区发生了多少次故障等问题。
答案 0 :(得分:0)
如果你有足够的RAM,你可以将所有字符串存储到一个巨大的数组中,然后为存储指向字符串的指针的每一行创建一个结构。 这些结构放在一个数组中,然后您可以按列进行排序。
如果您想最大限度地减少RAM使用,您可以再次针对每个问题阅读整个文件。这样,您只需将数据存储在当前问题所需的RAM中。