Имя: Пароль:
1C
1С v8
Подскажите с алгоритмом парсинга строки
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
а вообще было бы супер, если была бы строка с колонками и они были через пробелы или ;, тогда можно было получить точную длину колонки. тогда не было проблем. но увы
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший