|
|
|
Как победить RegExp при большом объеме файла? | ☑ | ||
|---|---|---|---|---|
|
0
Arta
25.02.06
✎
21:17
|
Есть несколько логов, которые надо подготовить для запроса через ODBC как csv. Для этого мне надо любое количество пробелов заменить на один сивол ";"
1С-вскими методами долго, попробовал рег.выражениями, но на больших файлах валится, если загнать в Replace файл полностью. Как разбить файл на определенное кол-во строк? Если построчно, то опять же долго... RegExp = СоздатьОбъект("VBScript.RegExp"); RegExp.IgnoreCase= 1; RegExp.Global = 1; RegExp.Multiline = 1; RegExp.Pattern = "\x20+"; FSO = СоздатьОбъект("Scripting.FileSystemObject"); TextStream2 = FSO.CreateTextFile("C:\Temp\Результат.csv", -1, 0); TextStream2.WriteLine("F1;F2;F3;F4;F5;F6;F7;F8;F9;F10"); Файл = ФС.НайтиПервыйФайл("C:\Temp\access.log" + "*"); Пока Файл <> "" Цикл File = FSO.GetFile("C:\Temp\Squid\" + Файл); TextStream1 = File.OpenAsTextStream(1, 0); Стр = TextStream1.ReadAll(); Стр = RegExp.Replace(Стр, ";"); // Срубается именно тут :( TextStream2.Write(Стр); Состояние("Идет обработка файла - " + Файл); TextStream1.Close(); Файл = ФС.НайтиСледующийФайл(); КонецЦикла; TextStream2.Close(); |
|||
|
1
Волшебник
модератор
25.02.06
✎
21:19
|
Загрузи файл в какую-нибудь базу и работай с ним.
|
|||
|
2
ШтушаКутуша
25.02.06
✎
21:22
|
используй возможности Excel
|
|||
|
3
Arta
25.02.06
✎
21:33
|
(1) Для этого и перевожу в csv, чтобы загрузить :)
А так это просто файлы не имеющие разделителей, и строгих привязок по позиции столбца. (2) Excel - таже история, ему нужны либо разделители, либо строгая длина колонки |
|||
|
4
romix
25.02.06
✎
22:19
|
(0) Как насчет метода СтрЗаменить()?
|
|||
|
5
Arta
25.02.06
✎
22:21
|
(4)Придется писать
СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") СтрЗаменить(Стр, " ", ";") :) И... Это долго, сам же знаешь что FSO рулит |
|||
|
6
romix
модератор
25.02.06
✎
22:22
|
Сначала заменяй 3 пробела на 2 (столько раз, чтобы исчезли все вхождения 3 и более пробелов). Потом заменяй 2 пробела на ;
Вообще, ексель умеет читать текст, размеченый в стиле таблиц для MS-DOS (когда выравнивание - пробелами), как таблицу. Посмотри там импорт. Чего только нет... |
|||
|
7
ШтушаКутуша
25.02.06
✎
22:29
|
и включи заполнять св-ва файлов: Сервис->Параметры->Общие->Предлагат заполнение св-в файлов
|
|||
|
8
Arta
25.02.06
✎
22:31
|
(6) Нету выравнивания, там + несколько пробелов после каждой колонки. Длина колонки разная. :(
Лана... сейчас придумаю что ни то. |
|||
|
9
insider
25.02.06
✎
22:46
|
(0) СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(ВыбСтр)," ",";"),";;",";"),";;",";")," ","");
|
|||
|
10
romix
модератор
25.02.06
✎
23:11
|
(9) Не ругайся 7-этажными выражениями в скобках :-)
Это можно сделать итерационно: Пока Найти(стр," ")>0 Цикл стр=СтрЗаменить(стр, " "," "); КонецЦикла; стр=СтрЗаменить(" ", ";"); |
|||
|
11
insider
25.02.06
✎
23:14
|
(10) нафиг развлекать проц лишними итерациями, твой вариант имхо на большом числе строк будет тормозить.
все, ждем NS, пусть рассудит :) |
|||
|
12
insider
25.02.06
✎
23:18
|
(11) есть у меня слабость, хотел решить оптимально, желательно в одну строку, правда пару минут соображал, что не так :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |