![]() |
![]() |
![]() |
|
Подскажите с алгоритмом парсинга строки | ☑ | ||
---|---|---|---|---|
0
zladenuw
11.08.11
✎
11:55
|
Есть такого вида тхт.
1 6X0012243 крюк для зняття ковп KOM 1.00 PDV20 7.95 7.95 H 34.09 1043 5 CZ F VW AG 303 VW AG 2 3AE075101 бризьговики к-т 2шт KOM 2.00 PDV20 471.00 942.00 Z5 27.98 1041 4 DE F VW AG 303 VW AG 3 3C0075101A бризьговики (к-т 2 ш KOM 2.00 PDV20 467.00 934.00 Z5 25.00 1041 3 DE F VW AG 303 VW AG 4 03G103483F ущільнювач KOM 1.00 PDV20 195.50 195.50 D 34.20 1044 5 DE Нужно обработать 1 и 9 колонку. Разделителя между колонками нету, только пробелы. Как быть ? кто то сталкивался с таким ? |
|||
1
Ненавижу 1С
гуру
11.08.11
✎
11:57
|
загрузить в Excel ))
|
|||
2
Ursus maritimus
11.08.11
✎
11:57
|
Там скорее всего не пробелы, а знак табуляции. Используй запрос через ADO
|
|||
3
Cube
11.08.11
✎
11:58
|
Советую надыбать файлик с разделителями, иначе ошибок не избежать...
|
|||
4
Aprobator
11.08.11
✎
12:00
|
к сожалению сталкивался и спецов, которые выдавали данные в таком формате, очень далеко посылал.
|
|||
5
Sammo
11.08.11
✎
12:06
|
Либо разделитель табуляция, либо фиксированный шаблон строки.
Обрабатывается по-разному |
|||
6
Рэйв
11.08.11
✎
12:08
|
Пока Найти(Строчка," ")>0 Цикл
Строчка=СтрЗаменить(Строчка," "," "); Конеццикла; СтрочкаМногострочная=СтрЗаменить(Строчка," ",Симсволы.ПС); СтрочкаКолонкир9=СтрПолучитьСтроку(СтрочкаМногострочная,9); ...ну и дальше по сценарию |
|||
7
Scooter
11.08.11
✎
12:08
|
стрЗаменить(ТвояСтрока, " ", Символы.ПС)
|
|||
8
FN
11.08.11
✎
12:15
|
Это файл без разделителей с полями фиксированной длинны.
Легко открывается Екселем либо Параметр1=Сред(СтрокаФайла,1,10); Параметр2=Сред(СтрокаФайла,11,48); и тп |
|||
9
Fragster
гуру
11.08.11
✎
12:16
|
ADO может работать и с файлами, у которых "фиксированная длина поля", т.е. без разделителя
|
|||
10
Aprobator
11.08.11
✎
12:18
|
(8) как определил, что поля фиксированной длины?
|
|||
11
Aprobator
11.08.11
✎
12:19
|
да нафиг еще через АДО текстовый файл ковырять?
|
|||
12
FN
11.08.11
✎
12:20
|
(10) копипастни в блокнот
|
|||
13
Aprobator
11.08.11
✎
12:23
|
(12) лениво, но метод интересный.
|
|||
14
Fragster
гуру
11.08.11
✎
12:35
|
(11) быстро, да и фильтры/группировки есть
|
|||
15
mzelensky
11.08.11
✎
12:37
|
Если обрабатывать по строчно, то можно функцией разложить:
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // глРазложить А разделитель у тебя будет - ести самые пробелы |
|||
16
Aprobator
11.08.11
✎
12:40
|
(14) хм - при случае надо будет попробовать.
|
|||
17
FN
11.08.11
✎
12:48
|
(15) Не взлетит
Например на таком файле: 1 6X0012243 крюк для зняття ковп KOM 2 3AE075101 бризьговики к-т 2шт KOM 3 3C0075101A Супер-Пупер_Автозапч.KOM |
|||
18
Torquader
11.08.11
✎
13:32
|
Теоретически, если в файле пробелов много, но между полями есть хотя-бы один, то распарсить такой файл - не проблема - сначала удаляем повторяющиеся пробелы, а потом парсим.
Но, если некоторые поля просто пропускаются (то есть вместо значения тоже пробелы), то ничего не выйдет. P.S. а получается такой файл, если текстовую распечатку отсканировать и скормить программе распознавания текста. |
|||
19
zladenuw
11.08.11
✎
18:15
|
сделал через АДО, но разницы нету, можно было штатными функциями 1с, во всех строк у 9 колонки начальная строка такая же, кроме 2, где нумерация увеличивается и код смещается на +1. хотя иметь идеальный парсинг дока, было бы неплохо. по поводу (18) может файл удачный попал. но наименование может быть большей длины тогда мой алгоритм не удачный..
|
|||
20
zladenuw
11.08.11
✎
18:18
|
а вообще было бы супер, если была бы строка с колонками и они были через пробелы или ;, тогда можно было получить точную длину колонки. тогда не было проблем. но увы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |