Как решить проблему разделителя внутри текста?

1. user1879509 07.03.23 16:50 Сейчас в теме
Подскажите пожалуйста, есть текстовый файл в нем значение первого элемента уникальный номер который может включать любой символ, в том числе и разделитель! При выгрузке файла многие некорректны!



&НаКлиенте

Процедура ПутьКфайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = НСтр("ru = 'Выберите TXT файл '")
+ "(*.txt)|*.txt";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите TXT файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;

КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл(Команда)
Объект.Джитины.Очистить();

ПоследовательноеЧтение = Ложь;
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(Объект.ПутьКфайлу);
Для НомерСтроки = 1 По Текст.КоличествоСтрок()Цикл
ТекСтрока = Текст.ПолучитьСтроку(НомерСтроки);
МассивСлов = СтрРазделить(ТекСтрока, ",");

Если МассивСлов.Количество()> 31 Тогда
Продолжить;
КонецЕсли;

НоваяСтрока = Объект.Джитины.Добавить();
НоваяСтрока.GTIN = СокрЛП(МассивСлов[0]);
КонецЦикла;
КонецПроцедуры
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1863362 07.03.23 17:23 Сейчас в теме
(1)
При выгрузке файла многие
Ну так не выгружайте их так.
9. independ 1552 07.03.23 18:24 Сейчас в теме
(1)
GTIN=Сред(ТекСтрока,2,СтрНайти(ТекСтрока,""",""")-1);
10. spacecraft 07.03.23 18:47 Сейчас в теме
(1) воспользуйтесь уже готовыми велосипедами:
https://kb.mista.ru/article.php?id=711
3. lmnlmn 69 07.03.23 17:26 Сейчас в теме
Сформулируйте, пожалуйста, ваш вопрос конкретнее.
4. user1879509 07.03.23 17:32 Сейчас в теме
(3) Я выгрузил файл, получил строку, мне нужно получить значения только первых элементов. Функция СтрРазделить(ТекСтрока, ",") , где разделителем является запятая не подходит, так как внутри например вот этого элемента "010290000175579521bHM,b+e&u?bZko" значение попадает только 010290000175579521bHM
7. lmnlmn 69 07.03.23 18:02 Сейчас в теме
(4) Если на все остальное наплевать, то возьмите в качестве разделителя не одну запятую, а "," (вместе с кавычками). Останется тогда только левую кавычку откинуть и экранированые кавычки в поле "разэкранировать". Еже ли по другим полям что-то надо, то кавычки парсить придется.
8. user1863362 07.03.23 18:07 Сейчас в теме
(7)У него есть пустые поля, которые ,,,,
Так что придется ему таки включать мозг и парсить кавычки.
5. user1879509 07.03.23 17:33 Сейчас в теме
(3)
Прикрепленные файлы:
6. user1863362 07.03.23 17:35 Сейчас в теме
(5) Ну так кавычки обрабатывать надо перед тем как разделители искать.
11. -AI- 07.03.23 22:05 Сейчас в теме
(5) как вариант, сначала нарезать строку по кавычкам...
м=стрРазделить(стр,"""",Истина);
после чего каждый нечетный ([1],[3],[5]...) элемент считаешь неделимым куском....
а каждый четный ([0],[2],[4]) изучаешь на наличие разделителей... если нет - склеиваешь соседей...
12. Dr.HiHi 2 08.03.23 03:03 Сейчас в теме
как вариант, можно разложить строку на массив по разделителю и потом в массиве склеить элементы

МассивСлов = СтрРазделить(ТекСтрока, ",");
Инд = 0;
Пока Инд < МассивСлов .ВГраница() Цикл
    Если СтрЧислоВхождений(МассивСлов [Инд], """")%2 Тогда
        МассивСлов [Инд] = МассивСлов [Инд] + "," + МассивСлов [Инд + 1];
        МассивСлов .Удалить(Инд + 1);
    Иначе			
        Инд = Инд + 1;
    КонецЕсли;
КонецЦикла;
Показать
13. user1863362 08.03.23 08:28 Сейчас в теме
(11)
каждый нечетный
Здесь нужна еще проверка, что строка начинается с кавычки. Если с неё, то каждый чётный - это внутри строки, нечётный - вне строки. Если не с неё, то наоборот - чётный вне строки, нечётный - внутри.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот