Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с TXT файлами  (Прочитано 4938 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Nikas
Гость
« : 16-08-2009 00:46 » 

Делаю обработку которая берёт данные из txt файла и загоняет их в Справочник

Тхт фаил имеет следующий формат

[Header]
1232824/17;18.08.2009;395.54;ПОСТАВКА;35.96;;РУБЛЬ;1;;;;;1660;Бровенко О.А. г.Петропавловск-Камчатский;
[Body]
8948;ГЛИЦЕРИН СУППОЗИТОРИИ РЕКТАЛЬНЫЕ 2.11Г №10;Нижфарм ОАО;Россия;1;33.64;29.87;30.58;;32.86;24;--;460409^POCC RU.ФM01.Д86594^01.05.2011 ФГУ ЦСЛС МЗ РФ;460409;01.05.2009;01.05.2011;;;;0;;;;0;68;
5797;ДОППЕЛЬГЕРЦ ЭНЕРГОТОНИК ФЛ. 250МЛ;Queisser Pharma;Германия;1;128.35;116.68;116.68;;128.35;36;10121130/281107/0003141;101098^POCC DE.ФM08.C34160^01.09.2011 ООО  ОЦС  г.Хабаровск;101098;01.09.2008;01.09.2011;;;;0;;;;0;334;
10794;ОЛИГОВИТ ТАБ. П/О №30;Фармстандарт (ICN) Октябрь г. Санкт-Петербург;Россия;2;53.03;46.85;48.21;;51.54;36;--;501108^POCC RU.ФM05.Д37151^01.12.2011 ООО ЦС г.Екатеринбург;501108;01.12.2008;01.12.2011;;;;0;;;;1;25;

после тега [Body]
идут три строчки данные с трочка разделены запятыми
смысл в том что мне нужно после тега [Body] обработать каждую строчку так чтобы данные брались не полностью а только какие то конкретные пункты допустим с названием страной производителем и и с кодом на примере первой строки это
ГЛИЦЕРИН СУППОЗИТОРИИ РЕКТАЛЬНЫЕ 2.11Г №10;
Россия;
8948;


Вот что уже написанно из кода
//*********************************************************************************
//***** Подключаемся к txt файлу и создаем несколько переменных для дальнейшей работы *****
//*********************************************************************************       

Процедура ОткрытьTXT()
ПутьКФайлу="G:\Работа\Интеграл\Николай\Тестовые файлы\Test.txt";    //сохраняем путь
Текст = СоздатьОбъект("Текст");                                                                 //создаем объект текст
Текст.Открыть(ПутьКФайлу);                                                                        //открываем фаил используя ранее сохр. путь
КолСтр = Текст.КоличествоСтрок();                                                            //создаем переменную с количеством строк в файле
Сообщить("Количество строк в файле: "+КолСтр);                                   //выводим сообщение с числом строк в окно статуса
Записан
Nikas
Гость
« Ответ #1 : 16-08-2009 00:47 » 

далее я в замешательстве как выдернуть текст между запятыми даже представления не имею
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #2 : 16-08-2009 04:56 » 

Ну вот вариант:
Считываешь все до ; обрезаешь строку, пото опять - считываешь обрезаешь:
Код:
функция Выбирать(стр)
к=найти(стр,";");
текСтр=сред(стр,1,к-1);
стр=сред(стр,к+1,стрдлина(стр));
возврат текСтр;
конецфункции
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #3 : 16-08-2009 04:58 » 

Код:
н=число(Выбирать(стр));     //-----------------------------------Код
          тов.код=н;
тов.Наименование=Выбирать(стр);//----------------------------------------Наименование

стр- это прочитанная тобой строка
тов - элемент справочника товары
« Последнее редактирование: 16-08-2009 05:02 от Dest » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 16-08-2009 09:13 » 

Когда-то для себя писал функцию преобразования строки с разделителями в список значений. Пользуюсь часто:
Код:
// ===============================
Функция глСтрокаВСписок(Знач Стр, Знач Разд=",", Знач РаздЗн="=", МинКво=0) Экспорт
Сп=СоздатьОбъект("СписокЗначений");
ДлРазд=СтрДлина(Разд);
ДлРаздЗн=СтрДлина(РаздЗн);
Стр=СокрЛП(Стр);
ЕстьРаздЗн=Мин(1,СтрДлина(РаздЗн));
Пока ПустаяСтрока(Стр)=0 Цикл
Поз=Найти(Стр,Разд);
Если Поз<1 Тогда
С=Стр;
Стр="";
Иначе
С=Лев(Стр,Поз-1);
Стр=СокрЛ(Сред(Стр,Поз+ДлРазд));
КонецЕсли;

Если ПустаяСтрока(С)=0 Тогда
С=СокрП(С);
Если ЕстьРаздЗн=1 Тогда Поз=Найти(С,РаздЗн);
Иначе Поз=0; КонецЕсли;
Если Поз>0 Тогда
Сп.ДобавитьЗначение(СокрЛ(Сред(С,Поз+ДлРаздЗн)),СокрП(Лев(С,Поз-1)));
Иначе
Сп.ДобавитьЗначение(С,С);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для И1=Сп.РазмерСписка()+1 По МинКво Цикл
Сп.ДобавитьЗначение("","");
КонецЦикла;
Возврат Сп;
КонецФункции
В твоем случае нужно закомментировать условие проверки на пустое значение:
Код:
//Если ПустаяСтрока(С)=0 Тогда
С=СокрП(С);
Если ЕстьРаздЗн=1 Тогда Поз=Найти(С,РаздЗн);
Иначе Поз=0; КонецЕсли;
Если Поз>0 Тогда
Сп.ДобавитьЗначение(СокрЛ(Сред(С,Поз+ДлРаздЗн)),СокрП(Лев(С,Поз-1)));
Иначе
Сп.ДобавитьЗначение(С,С);
КонецЕсли;
//КонецЕсли;
И вызывать, правильно указывая параметры:
Код:
Сп=глСтрокаВСписок(Стр, ";", "");
Код=Сп.ПолучитьЗначение(1);
Наименование=Сп.ПолучитьЗначение(2);
Записан
Nikas
Гость
« Ответ #5 : 16-08-2009 11:56 » 

Kivals вот спасибо то что нужно!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines