8.х Функции работы со строками! Помогите разобраться...

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

  1. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток всем B) Вобщем столкнулся с тем, что набор функций работы со строками специфический немного в 1С 8.0. Если ближе к делу, то у меня есть строка формата:

    Код:
    Company;8249;03.09.2007-12:00:10;17;0.1139;4020
    
    Необходимо написать функцию, входными параметрами которой будут: "строка", "номер поля".
    Результатом возврата которой было бы значение поля под переданынм номером.

    У меня сходу не получилось это реализовать. Свой код пока не хочу сюда постить чтобы не задать им ход мысли - хочу послушать ваши предложения, может оно намного проще реализуется, чем я задумал...

    Всем спасибо за внимание и ответы :unsure:
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Как вариант, может не понравится, но ничего такой:
    Код:
    ТД = Новый ТекстовыйДокумент;
    ТД.УстановитьТекст(СтрЗаменить(ВАШАСТРОКА, ";", Символы.ПС));
    
    
    Вы получите Текстовый документ, каждое значение на новой строке - как получать строки - по хелпу разберетесь :) По номеру строки будете получать и номер поля и значение его.

    То есть ваш пример станет:
    Код:
    Company
    8249
    03.09.2007-12:00:10
    17
    0.1139
    4020
    
    
  3. Prospero
    Offline

    Prospero Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    111
    Симпатии:
    0
    Баллы:
    26
    А если просто:
    Код:
    РазделеннаяСтрока = СтрЗаменить(СтрокаПараметр, ";", Символы.ПС);
    Результат = СтрПолучитьСтроку(РазделеннаяСтрока,НомерПоляПараметр);
    
    ?
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Prospero, Совершенно верно, я просто не знаю для чего использовать будут :))) Да и голова после отпуска еще не до конца фокусирует мысли - нам такие задачи приходилось на файлах решать, вот я и предложил, а как-то так напрямую уже и не помню, может и делили, а потом в список значений загоняли...
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А я бы сделал так:
    Код:
    ВременнаяСтрока = СокрЛП(РазбираемаяСтрока)
    
    Для НомерСтроки = 1 по СтрЧислоСтрок(ВременнаяСтрока)
    СтрокаПараметра = СтрПолучитьСтроку(ВременнаяСтрока, НомерСтроки);
    КонецЦикла;
    
    
    Соответственно, СтрокаПараметра - искомые значения

    АПДЕЙТ: Не сочтите тормозом, просто начал писать и отвлёкся :)
  6. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Я сделал в тупую посимвольным перебором строки и формированием массива со значениями полей разделенных ";"...


    Код:
    Функция ВычислитьИзСтроки(СтрокаВыписки);
    i=0;
    
    стртемп = "";
    ВсеПоля = Новый Массив;
    
    Для i=1 по СтрДлина(СтрокаВыписки) Цикл
    
    Если Сред(СтрокаВыписки,i,1)<>";" Тогда
    стртемп = стртемп + Сред(СтрокаВыписки,i,1);
    Иначе
    ВсеПоля.Добавить(стртемп);
    стртемп = "";
    КонецЕсли;
    КонецЦикла;
    
    Возврат(ВсеПоля);
    
    КонецФункции
    
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    При большом объеме разбора данных - конкатенация строк будет тормозить не по-детски...
  8. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Посимвольный перебор гораздо медленнее встроенных функций (Типа СтрЗаменить)
  9. kholann
    Offline

    kholann

    Регистрация:
    16 июл 2008
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    У меня есть некий документ, в форме которого вставлено ПолеТекстовогоДокумента. При первом открытии этого документа я заношу какой-то текст в это поле. Нажимаю "Записать" и "OK", закрываю документ. Вопрос в том, как сохранить занесенный текст в поле текстового документа, чтобы он отображался при последующих открытиях моего документа. Пока только пустое поле. Что можете посоветовать? Большое спасибо за внимание.
  10. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Создать реквизит документа.
  11. Омский домовой
    Offline

    Омский домовой

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

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