Lexua
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Zloy_Gelud Ну как всегда изящно У меня с учетом того, что мне нужно выгребать реализовано так Код: PrefixTable = {"ACPI\\", "PCI\\", "HDAUDIO\\", "USB\\", "HID\\", "PCMCIA\\", "USBPRINT\\", "LPTENUM\\", "SERENUM\\", "DOT4PRT\\", "DOT4USB\\", "DOT4\\"}; for index, prefix in pairs(PrefixTable) do prefixLen = String.Length(prefix); nStart = 1; fndPrefix = 0; while fndPrefix ~= -1 do if index == 1 and nStart == 1 then fndPrefix = String.Find(strHWIDS, prefix, nStart, false); else fndPrefix = String.Find(strHWIDS, "\n"..prefix, nStart, false); end nStart = fndPrefix + prefixLen; endFullHW = String.Find(strHWIDS, "\\", nStart + 1, false); strlen = endFullHW - fndPrefix; TextFile.WriteFromString("C:\\result.tmp", String.Mid(strHWIDS, fndPrefix, strlen), true); end end | Но только это далеко, не все, что нужно. Цитата: PCI\VEN_11AB&DEV_4363&SUBSYS_110F1734&REV_14\4&2473BB23&0&00E1 Name: Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller Hardware IDs: PCI\VEN_11AB&DEV_4363&SUBSYS_110F1734&REV_14 PCI\VEN_11AB&DEV_4363&SUBSYS_110F1734 PCI\VEN_11AB&DEV_4363&CC_020000 PCI\VEN_11AB&DEV_4363&CC_0200 Compatible IDs: PCI\VEN_11AB&DEV_4363&REV_14 PCI\VEN_11AB&DEV_4363 PCI\VEN_11AB&CC_020000 PCI\VEN_11AB&CC_0200 PCI\VEN_11AB PCI\CC_020000 PCI\CC_0200 PCI\VEN_8086&DEV_2448&SUBSYS_00000000&REV_F3\3&61AAA01&0&F0 Name: Intel(R) 82801 PCI Hardware IDs: PCI\VEN_8086&DEV_2448&SUBSYS_00000000&REV_F3 PCI\VEN_8086&DEV_2448&SUBSYS_00000000 PCI\VEN_8086&DEV_2448&REV_F3 PCI\VEN_8086&DEV_2448 PCI\VEN_8086&DEV_2448&CC_060401 PCI\VEN_8086&DEV_2448&CC_0604 Compatible IDs: PCI\VEN_8086&CC_060401 PCI\VEN_8086&CC_0604 PCI\VEN_8086 PCI\CC_060401 PCI\CC_0604 | Жирным выделено то, что нужно выгребать из одной секции. И самое главное, чтоб из этой, а не следующей. Но это только pci. А есть и другие и формат их может отличаться и выгребаемые данные. Вообще-то у меня уже накорябан код, и он исправно выгребает все, что нужно, но он далек от совершенства и выполняется около пяти сек на моем компе. А хочется чтоб работало быстрее. Чисто субъективно поиск в строке происходит несколько быстрее чем в таблице, хотя может я и не прав. Вот я и взялся переписывать парсер. Ладно, буду ковыряться. С таблицей конечно проще. |