解析文本文件中数据的有效方法

时间:2019-02-19 03:55:59

标签: c# text-parsing

我有一个以下格式的文本文件。

FILE_TYPE=MULTI_PHYS_TABLE;


PART '74AVC1T45_Q100'
:PART_NUMBER|PACK_TYPE|MATERIAL|NAME|FP_TECH|IP=SCH_CHECKLEVEL|CLASS|FSP_LOGICAL_MODEL|AML|LPID|MFG_STATUS|PART_CHECKLEVEL|DESCRIPTION|MFG_NAME_1|MFG_NAME_2|MFG_PN_10|ASI_MODEL|ENVCOMP|FPT_CHECKLEVEL|MFG_STATUS_10|MFG_NAME_4|MFG_NAME_3|MFG_NAME_6|MFG_NAME_5|MFG_NAME_8|LOGIC_2|MFG_NAME_7|LOGIC_1|JEDEC_TYPE|MFG_NAME_9|MAX_OPER_TEMP|MFG_PN_8|MFG_PN_9|MAX_REFLOW_TEMP|HEIGHT|MFG_PN_4|MFG_PN_5|MFG_PN_6|MFG_PN_7|STATUS|MFG_PN_1|MFG_PN_2|MFG_PN_3|CREATED_BY|WEIGHT|SPEED_URL|LEAD_LENGTH|DESIGN_GROUP|DAYS|ALT_SYMBOLS|MIN_OPER_TEMP|MFG_NAME_10|MFG_STATUS_1|MFG_STATUS_3|MFG_STATUS_2|MFG_STATUS_9|MFG_STATUS_8|RPL|MFG_STATUS_5|MFG_STATUS_4|COMPONENT_TYPE|MFG_STATUS_7|MFG_STATUS_6|PART_NUMBER;
'G69247-001'|'XSON6'|'IC'|'74VC1T45_Q100'|'TK0'|'GENERIC' ('!')='BRONZE'|'IC'|''|''|''|''|'BRONZE'|'IC,LOG,TRANSCEIVE,SOT886,SN74AVC1T45,NI3S'|''|''|''|'G69247-001'|''|'BRONZE'|''|''|''|''|''|''|''|''|''|'TK0_LCC6_1500X1050_500_MA'|''|'125C'|''|''|''|'0.500 MM'|''|''|''|''|''|''|''|''|''|''|'http://example.com'|''|''|''|'()'|'-40C'|''|''|''|''|''|''|''|''|''|'SMALLSMT'|''|''|'G69247-001':CDS_LW_PART_NUMBER='G69247-001'
'G69247-001'|'XSON6'|'EMPTY'|'74VC1T45_Q100'|'TK0'|'GENERIC' ('!')='BRONZE'|'IO'|''|''|''|''|'BRONZE'|'IC,LOG,TRANSCEIVE,SOT886,SN74AVC1T45,NI3S'|''|''|''|'G69247-001'|''|'BRONZE'|''|''|''|''|''|''|''|''|''|'TK0_LCC6_1500X1050_500_MA'|''|'125C'|''|''|''|'0.500 MM'|''|''|''|''|''|''|''|''|''|''|'http://example.com'|''|''|''|'()'|'-40C'|''|''|''|''|''|''|''|''|''|'SMALLSMT'|''|''|'G69247-001':CDS_LW_PART_NUMBER='G69247-001'
END_PART


PART '74CBTLV3126'
:PART_NUMBER|PACK_TYPE|MATERIAL|NAME|FP_TECH|IP=SCH_CHECKLEVEL|CLASS|FSP_LOGICAL_MODEL|AML|LPID|MFG_STATUS|PART_CHECKLEVEL|DESCRIPTION|MFG_NAME_1|MFG_NAME_2|MFG_PN_10|ASI_MODEL|ENVCOMP|FPT_CHECKLEVEL|MFG_STATUS_10|MFG_NAME_4|MFG_NAME_3|MFG_NAME_6|MFG_NAME_5|MFG_NAME_8|LOGIC_2|MFG_NAME_7|LOGIC_1|JEDEC_TYPE|MFG_NAME_9|MAX_OPER_TEMP|MFG_PN_8|MFG_PN_9|MAX_REFLOW_TEMP|HEIGHT|MFG_PN_4|MFG_PN_5|MFG_PN_6|MFG_PN_7|STATUS|MFG_PN_1|MFG_PN_2|MFG_PN_3|CREATED_BY|WEIGHT|SPEED_URL|LEAD_LENGTH|DESIGN_GROUP|DAYS|ALT_SYMBOLS|MIN_OPER_TEMP|MFG_NAME_10|MFG_STATUS_1|MFG_STATUS_3|MFG_STATUS_2|MFG_STATUS_9|MFG_STATUS_8|RPL|MFG_STATUS_5|MFG_STATUS_4|COMPONENT_TYPE|MFG_STATUS_7|MFG_STATUS_6|PART_NUMBER;
'G21997-001'|'QFN'|'EMPTY'|'74CBTLV3126'|'TK0'|'GENERIC' ('!')='BRONZE'|'IO'|''|''|''|''|'BRONZE'|'IC,LOG,Q-SWITCH,QFN,74CBTLV3126,BUS'|''|''|''|'G21997-001'|''|'BRONZE'|''|''|''|''|''|''|''|''|''|'TK0_LCC14_3100X2600_500_DF1650X1150_MA'|''|'125C'|''|''|''|'1.000 MM'|''|''|''|''|''|''|''|''|''|''|'http://example.com'|''|''|''|'()'|'-40C'|''|''|''|''|''|''|''|''|''|'LCC'|''|''|'G21997-001':CDS_LW_PART_NUMBER='G21997-001'
'G21997-001'|'QFN'|'IC'|'74CBTLV3126'|'TK0'|'GENERIC' ('!')='BRONZE'|'IC'|''|''|''|''|'BRONZE'|'IC,LOG,Q-SWITCH,QFN,74CBTLV3126,BUS'|''|''|''|'G21997-001'|''|'BRONZE'|''|''|''|''|''|''|''|''|''|'TK0_LCC14_3100X2600_500_DF1650X1150_MA'|''|'125C'|''|''|''|'1.000 MM'|''|''|''|''|''|''|''|''|''|''|'http://example.com'|''|''|''|'()'|'-40C'|''|''|''|''|''|''|''|''|''|'LCC'|''|''|'G21997-001':CDS_LW_PART_NUMBER='G21997-001'
END_PART

END.

我想提取PARTEND_PART之间的信息。如您所见,列和值由|符号分隔。 我正在尝试以下方式

StreamReader reader = File.OpenText(PTFPath);
    string line;
    while (((line = reader.ReadLine()) != null) && line.StartsWith(StartPart))
    {
        string symbolName = line.Split(' ')[1];
        //loop again until we see END_PART
        //Record the column order as its the first row and remaining rows as the values of the part
    }

但是,这可能会导致n平方复杂度或n多维数据集。我只是想知道是否有更好,有效和更快的方法可以在C#中解析此文件

0 个答案:

没有答案