Версия для печати темы (https://pro1c.org.ua/index.php?s=e77c7fb860ce6c80db7c49ef59da1a70&showtopic=743)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Работа с текстовым файлом

Автор: Vofka 03.08.09, 12:44

Есть текстовый файл. В нем строки типа:

ячтситьи;чиыриори;ыапрпарпа;

Как мне разделить эту строку так:
Перем1 = ячтситьи;
Перем2 = чиыриори;
перем3 = ыапрпарпа;

?

Автор: zetovich 03.08.09, 12:56

эх...совсем народ разленился...
и прада не умееете работать со строками?
нет говтов...мсамому функцию написать 5-10 строчек

Автор: zetovich 03.08.09, 13:05

Функция Разпарсить(Стр)
Разделитель = ";";

ТЗ = СоздатьОбъект("ТаблицаЗначний");
ТЗ.НоваяКОлонка("СуперСтрока", );
Стр = СокрЛП(Стр)
Пока Найти(Стр, Разделитель) Цикл
гы = Лев(Стр,Найти(Стр, Разделитель) - 1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, Разделитель));
ТЗ.НоваяСтрока();
ТЗ.СуперСтрока = гы;
КонецЦикла
возврат ТЗ;
КонецФункции
--------------
з.ы. писал тут в окне...может и ругнется wink.gif
возвращает Таблицу с строками разделенными раздилителем (wink.gif

Автор: Vofka 03.08.09, 13:05

Просто зачем изобретать велосипед, если для этого есть специальная функция

Ладно, тогда вопрос такой:
как поризвести поиск в строке до определённого символа?

Автор: zetovich 03.08.09, 13:08

Цитата(Vofka @ 03.08.09, 15:05) *
Просто зачем изобретать велосипед, если для этого есть специальная функция

Ладно, тогда вопрос такой:
как поризвести поиск в строке до определённого символа?

нема такой функции...так что можете смело изобретать велосипед!
з.ы. в качестве парметра в функцию можно передать и строку разделитель....будет ваще парсить на ура smile.gif

Автор: хакерок 03.08.09, 14:42

Цитата(Vofka @ 03.08.09, 15:05) *
Просто зачем изобретать велосипед, если для этого есть специальная функция

Ладно, тогда вопрос такой:
как поризвести поиск в строке до определённого символа?


Вот тебе примерчик как из

ячтситьи;чиыриори;ыапрпарпа;";

получить ячтситьи

Стр = "ячтситьи;чиыриори;ыапрпарпа;";
СимволРазделения =";"
КусокСтрокиДоСимвола = ""; С = 1; Дл =СтрДлина(Стр);
Пока Сред(Стр,С,1) <> СимволРазделения Цикл
КусокСтрокиДоСимвола = КусокСтрокиДоСимвола + Сред(Стр,С,1);
С = С+1;
КонецЦикла;

Автор: Batchir 03.08.09, 16:30

А зачем по "букавкам" перебирать строку?
ИМХО, zetovich достаточно точно описал разбитие строки с помощью функции Найти

Автор: MATEVI 03.08.09, 18:54

Т = СоздатьОбъект("Текст");
Сп = СоздатьОбъект("СписокЗначений");
Т.Открыть(ИмяФайла);
Для Сч=1 По Т.КоличествоСтрок() Цикл
Стр = Т.ПолучитьСтроку(Сч);
Сп.УдалитьВсе();
Сп.ИзСтрокиСРазделителями(Стр);
Если Сп.РазмерСписка() <= 0 Тогда
Продолжить;
КонецЕсли;
НомерПП = Сред(Сп.ПолучитьЗначение(1),13);
КонецЦикла

Автор: хакерок 04.08.09, 8:58

Может я не прав но текстовый файл можно использовать для обмена данных между программами 1С и внешними

например файл типа

Строка1+СимволТабуляции+Строка2+СимволТабуляции+Строка3

отлично открывается любой версией мийкрософт екселя для дополнительнях вычислений или отчётов.

кроме того он прекрасно вноситься в другие базы данных Access , MS SQL ...

С функция ВСтрокуСРазделителями() не разгонишься.

Ктото делал связь такого файла с MS Access?

Автор: Vofka 04.08.09, 11:17

Цитата
Может я не прав но текстовый файл можно использовать для обмена данных между программами 1С и внешними


Ну а зачем же ещё?

Цитата
как поризвести поиск в строке до определённого символа?


Вообще мозг вчер не работал. Найти() рулит

Всем спасибо, сделал что хотел. Для моего случая это выглядит так:



Процедура РазделитьСтроку(Строчка, Разделитель)

ЕДРПОУ = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

МФОА = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

РСчетА = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

Валюта = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

ДатаОперации = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

КодОперации = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

МФОБ = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

НазваниеБанка = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

СчетКорр = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

ЕДРПОУКорр = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

Корр = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

НомерДок = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

ДатаДокумента = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

Дебет = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

Кредит = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

ПризначенняПлатежу = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

ГривневеПокриття = Лев(Строчка, Найти(Строчка, Разделитель)-1);
Строчка = Прав(Строчка, СтрДлина(Строчка) - Найти(Строчка, Разделитель));

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


К стати, почему никто не пользуется тегами для вставки кода?

Автор: MATEVI 04.08.09, 11:18

Цитата(хакерок @ 04.08.09, 10:58) *
....С функция ВСтрокуСРазделителями() не разгонишься. ...

Ну вопрос задавался о том как разбить строку на части.

ЗЫ C Access работать не доводилось только с Excel

Автор: MATEVI 04.08.09, 11:27

Цитата(Vofka @ 04.08.09, 13:17) *
Ну а зачем же ещё?
Вообще мозг вчер не работал. Найти() рулит
Всем спасибо, сделал что хотел. Для моего случая это выглядит так:


Все таки посмотрел бы Сп.ИзСтрокиСРазделителями() и код был бы поменьше.

Автор: Vofka 04.08.09, 11:38

Цитата
Все таки посмотрел бы Сп.ИзСтрокиСРазделителями() и код был бы поменьше.


Посмотрю smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua