|   |   | 
| 
 | Как победить 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) есть у меня слабость, хотел решить оптимально, желательно в одну строку, правда пару минут соображал, что не так :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |