8.х Чтение данных из ini файла

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ximera, 17 мар 2008.

  1. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    Добрый день.
    Пишу обработку для выдирания данных из ini файла, сформированного при помощи программы everest и дальнейшего из занесения в справочник. Работу делаю в 1С 8.0, конфигурация самописная. Для этого как было описано в http://www.1c-pro.ru/index.php?showtopic=3631&hl=txt с ini файлом планирую работать как с текстовым. Процедуры чтения, записи мне понятны. Вопрос состоит в следующем, необходимо выбирать лишь конкретные части файла. К примеру в строке:
    Дисплей|Монитор1=Samsung SyncMaster 750(M)s(T) [17" CRT] (HMAR516413)
    должно быть прочитано и занесено в справочник только Samsung SyncMaster 750(M)s(T) [17" CRT] (HMAR516413). Помогите с решением данного вопроса.
    в качестве примера:
    Системная плата|Тип ЦП=Unknown, 1866 MHz (3.5 x 533)
    Системная плата|Системная плата=Unknown
    Системная плата|Чипсет системной платы=Unknown
    Системная плата|Системная память=503 Мб
    Системная плата|Тип BIOS=AMI (08/06/07)
    Системная плата|Коммуникационный порт1=Последовательный порт (COM1)
    Системная плата|Коммуникационный порт2=ECP порт принтера (LPT1)

    Дисплей|Видеоадаптер1=Intel® 946GZ Express Chipset Family (256 Мб)
    Дисплей|Монитор1=Samsung SyncMaster 750(M)s(T) [17" CRT] (HMAR516413)
    Дисплей|Монитор2=Samsung SyncMaster 750(M)s(T) [17" CRT] (HMAR516413)

    Мультимедиа|Звуковой адаптер1=Intel 82801GB ICH7 - High Definition Audio Controller [A-1]

    Хранение данных|Контроллер IDE1=Intel® 82801G (ICH7 Family) Ultra ATA Storage Controllers - 27DF
    Хранение данных|Контроллер IDE2=Intel® 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller - 27C0
    Хранение данных|Дисковый накопитель1=MAXTOR STM380815AS (74 Гб, IDE)
    Хранение данных|Статус SMART жестких дисков=OK

    Разделы|Раздел1=C: (NTFS) 76316 Мб (73858 Мб свободно)

    Ввод|Клавиатура1=Стандартная (101/102 клавиши) или клавиатура PS/2 Microsoft Natural
    Ввод|Мышь1=Microsoft PS/2 мышь

    Сеть|Первичный адрес IP=192.168.90.3
    Сеть|Первичный адрес MAC=00-1E-8C-47-B8-31
    Сеть|Сетевой адаптер1=Attansic L1 Gigabit Ethernet 10/100/1000Base-T Controller (192.168.90.3)
  2. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    посмотри в стронону функций рабобы со строкой
    алгоритм приблизительно такой
    1. находишь символ = (равно), определчешь его позицию в строке (это "Найти")
    3. выдираешь текст из строки начиная с заданной позиции до конца строки (это "Сред")
  3. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    1. можно название функции привести, в идеале пример
    2. если мне к примеру из всех строк файла нужны только к примеру номер 10,11,25,30,41. Каким образом это реализовать?
  4. vlashi
    Offline

    vlashi Опытный в 1С

    Регистрация:
    18 янв 2008
    Сообщения:
    143
    Симпатии:
    0
    Баллы:
    26
    Код:
     	Если ФС.Существует()=Истина Тогда
    Текст = Новый ЧтениеТекста(Файл, КодировкаТекста.ANSI);
    Строк = Текст.ПрочитатьСтроку();
    Пока Строк <> Неопределено Цикл // строки читаются до символа перевода строки
    Элемент = "";
    Строк = Текст.ПрочитатьСтроку();
    Стр = СтрЗаменить(Строк,"|	|","$");
    Если Лев(Стр,1) = "|" Тогда
    Если (ПреобразоватьВДату(Сред(Стр,2,10)) = Дата) или (ФайлПолностью = Истина) Тогда
    ТЗСтр = ТЗ.Добавить();
    НомКол = 0;
    Для Симв = 2 по СтрДлина(Стр) Цикл
    Эл = Сред(Стр,Симв,1);
    Если Эл <> "$" Тогда
    Элемент = Элемент + Эл;
    Иначе
    ТЗСтр.Установить(НомКол,Элемент);
    НомКол = НомКол + 1;
    Элемент = "";
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;	
    Иначе
    Предупреждение ("Файл не найден!");
    Возврат;
    КонецЕсли;	
    ТЗ.ВыбратьСтроку();
    
    
    Этот кусок у меня забирает данные из текстового файла , в котором данные разделены "| |" , и записывает их в таблицу значений
  5. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Ну, вот пример набранный за 7 минут.
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Текст = новый ЧтениеТекста(ИмяФайла);	
    стр = Текст.ПрочитатьСтроку();	
    Пока стр <> неопределено Цикл
    ОбработкаПрерыванияПользователя();
    Сообщить("Получена строка: "+стр);
    // Ну, можно предположить, что до равно - у нас вид железа, после - наименование.
    позицияРавно = Найти(стр,"=");
    Если ПозицияРавно = 0 Тогда
    стр = Текст.ПрочитатьСтроку();
    Сообщить("Равно не найдено, можно идти к след строке...");
    Продолжить;
    КонецЕсли;
    ДлинаСтроки = СтрДлина(Стр);
    Сообщить("имя железки: "+Прав(Стр,ДлинаСтроки-ПозицияРавно));
    стр = Текст.ПрочитатьСтроку();
    КонецЦикла;
    КонецПроцедуры
    
    Вообще анализ текстовых файлов достаточно простая и в то же время очень интересная тема...
  6. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    to lazy, vlashi - спасибо большое, все работает. Тема закрыта
Похожие темы
  1. wary
    Ответов:
    7
    Просмотров:
    12.004
  2. CSCO12103692
    Ответов:
    4
    Просмотров:
    484
  3. cobra77777
    Ответов:
    11
    Просмотров:
    893
Загрузка...

Поделиться этой страницей