Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 08:23
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Загрузка из *.txt файла (распарсивание строки)  (Прочитано 6584 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vladiwir

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-11-03
  • Сайт: 
  • Профессия: Программист 8.1
Имеется текстовый файл для загрузки Сотрудники.тхт :

000000004;Дураков Д.Д.;Управление;25 000
000000003;Козлов Н.П.;Управление;28 000
000000001;Петров П.П.;Склады;20 000
000000002;Сидоров П.П.;Управление;15 000

Процедура обработки загрузки:

&НаСервере
Процедура ЧтениеТекстаИзФайла()
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\ТХТ\Сотрудники.txt");

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

КонецПроцедуры

Во всех примерах в инете до второго разделителя- здесь все в порядке, а как вытащить Подразделение и Оклад.
Закомментированный код  не дает результата. Как Быть? Нужна помощь, заранее благодарен.


Оффлайн Kironten

  • *****
  • Сообщений: 906
  • РЕПУТАЦИЯ: 185
  • КПД: 20%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
Методом Найти() вы получите ТОЛЬКО первую позицию из найденных в строке.
Остальные разделители вы не редактируя строку не получите.
Поюзайте метод Прав().
Примерно алгоритм будет следующий:
Нашли первый разделитель.
Присвоили элементу справочника - код из строки.
Обрезали строку методом Прав() - в результате получили строку "Дураков.Д.Д;Управление;25000"
Опять нашли позицию первого разделителя
Присвоили элементу справочника - Наименование из строки
Опять обрезали строку методом Прав() в результате получили строку "Управление;25000"
Опять находите позицию разделителя.
Берете символы слева до разделителя и помещаете в подразделение, берете символы справа от разделителя и засовываете в оклад.
Все.

Оффлайн TreeDogNight

  • ***
  • Сообщений: 202
  • РЕПУТАЦИЯ: 28
  • КПД: 14%
  • Регистрация: 2013-10-16
    • Skype: treedognight3
  • Сайт: www.avars.uz
  • Профессия: Программист 1С
Думаю эта функция вам в этом случае поможет.
// Функция "расщепляет" строку на подстроки, используя заданный
//      разделитель. Разделитель может иметь любую длину.
//      Если в качестве разделителя задан пробел, рядом стоящие пробелы
//      считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//      игнорируются.
//      Например,
//      РазложитьСтрокуВМассивПодстрок(",один,,,два", ",") возвратит массив значений из пяти элементов,
//      три из которых - пустые строки, а
//      РазложитьСтрокуВМассивПодстрок(" один   два", " ") возвратит массив значений из двух элементов
//
//  Параметры:
//      Стр -           строка, которую необходимо разложить на подстроки.
//                      Параметр передается по значению.
//      Разделитель -   строка-разделитель, по умолчанию - запятая.
//
//  Возвращаемое значение:
//      массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт

МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1 = 1 Цикл
Поз = Найти(Стр, Разделитель);
Если Поз = 0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр, Поз - 1));
Стр = СокрЛ(Сред(Стр, Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1 = 1 Цикл
Поз = Найти(Стр, Разделитель);
Если Поз = 0 Тогда
Если (СокрЛП(Стр) <> "") Тогда
МассивСтрок.Добавить(Стр);
КонецЕсли;
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз - 1));
Стр = Сред(Стр, Поз + ДлинаРазделителя);
КонецЦикла;
КонецЕсли;

КонецФункции
Cегодня не все могут провести завтрашним числом. Вернее, не только лишь все - мало кто может это сделать.


Теги:
 

Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")

Автор Сергей_87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 8582
Последний ответ 26 Апр 2012, 23:08
от Dethmontt
загрузка из "клиента банка"

Автор miximlРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2698
Последний ответ 19 Июн 2012, 09:49
от miximl
Загрузка в 1С Управление Торговлей 11.1.5.16 электронных выписок из клиент банка "Альфа-Банк"

Автор regnusРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 12008
Последний ответ 11 Июл 2014, 17:22
от regnus
Проблема с внешней обработкой "Загрузка банк-клиент.erp"

Автор razielРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 2164
Последний ответ 24 Сен 2015, 20:13
от Kironten
Загрузка из "нестандартного" табличного документа (exel) в справочник

Автор uchenichokРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1003
Последний ответ 03 Июн 2016, 07:15
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
135 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
63 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 401
  • Точка Скрытых: 0
  • Точка Пользователей: 11
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal