Имя: Пароль:
1C
 
работа с текстовым файлом
,
0 lamme
 
07.07.21
10:27
Есть csv файл со структурой  (разделитель - ЗПТ)

Число1,"Строка1",Число2,"Строка5"
Число4,"Строка6,Строка7,Строка8",Число20,"Строка100"

как правильно можно разобрать по параметрам?
(прошу обратить внимание на стр2 - где в одном параметре есть зпт)

РазложитьВМассивПодстрок - тут хорошо работает только на стр1 - где в строковых параметрах нет зпт
а на второй строке - облом.
1 Fragster
 
гуру
07.07.21
10:29
adodb или внешний источник данных
2 Bigbro
 
07.07.21
10:29
замените запятые в исходном тесте на "нечто невстречаемое" после разбиения обратная замена.
3 lamme
 
07.07.21
10:43
1 - пример?
2 - исходный текст не меняется.
4 VladZ
 
07.07.21
10:47
(0) Где взяли исходный текст?
Пообщаться с теми, кто предоставил эту "дичь" и попросить в нормальном виде.
5 Смотрящий
 
07.07.21
10:53
(0) Тебе надо заменить запятую разделяющую поля на какой нить символ, например тильду, не трогая запятые в красках.
Посимвольное сканирование с выставлением флага либо поиск диапазонов.
Проще получить измененный исходный файл
6 SleepyHead
 
гуру
07.07.21
10:59
(0) Совсем обленились.. простенький конечный автомат сделай.
7 Ногаминебить
 
07.07.21
11:10
Если типы число/строка всегда идут в одинаковом сочетании - то несложно. Иначе теоретически возможны варианты всякие нехорошие.
ЗЫ:
В числе разделитель дробной части не запятая случайно?
8 Bigbro
 
07.07.21
11:13
вторую строку ты не поделишь никогда нормально. нет критерия чтобы считать какая из встреченных запятых относится к разделителю а какая к тексту если их суммарно больше 3х.
9 ДенисЧ
 
07.07.21
11:15
(8) С какого перепоя нет? Есть. Кавычки посчитать же можно
10 Bigbro
 
07.07.21
11:17
а при чем тут кавычки
11 ДенисЧ
 
07.07.21
11:17
(10) Ты прав. Совершенно ни причём. Ну просто абсолютно.
12 Bigbro
 
07.07.21
11:17
в csv никаких кавычек не будет, они тут для красоты чтобы "строка" выделялась
13 acht
 
07.07.21
11:17
(10) Программисты 1С такие программисты
14 Василий Алибабаевич
 
07.07.21
11:18
(10) Строка начинается с кавычки и заканчивается кавычкой ЖЕ. Все что между кавычками 1 и 2 - строка, 3 и 4 - строка ...
15 Bigbro
 
07.07.21
11:18
покажите пример этого csv, а то я тут смотрю гении набежали.
16 acht
 
07.07.21
11:20
(15) Я тебе лучше https://www.rfc-editor.org/rfc/rfc4180.txt пункт 2, часть 5 покажу
17 Василий Алибабаевич
 
07.07.21
11:21
(15) Стандарт RFC 4180 :
...
"если поле содержит запятые, переносы строк, двойные кавычки, то это поле должно быть заключено в двойные кавычки."
"символ двойной кавычки в поле должен быть удвоен."
18 DimVad
 
07.07.21
11:27
1. Считываете строку в переменную СтрокаИзФайла
2. Устанавливаете булевскую переменную ЕстьКавычка в Ложь
3. Делаете цикл по всем символам строки в котором"
   а. Встретив кавычку меняете значение переменной ЕстьКавычка.
   б. Встретив символ , меняете его на какой-нибудь не встречаемый в тексте если переменная ЕстьКавычка = Ложь.
4. Раскладываете в массив по тому символу, на которой меняли ,
19 Ногаминебить
 
07.07.21
11:29
(18) А если там подряд два параметра с типом число?
20 DimVad
 
07.07.21
11:30
(19) Как это выглядит ?
21 Bigbro
 
07.07.21
11:30
ага. и я должен Верить! что у меня входной файл будет соответствовать формату?
ну-ну.
22 Bigbro
 
07.07.21
11:31
сохранил Экселем csv никаких кавычек нет. как и предполагалось.
23 acht
 
07.07.21
11:33
(21) Программисты 1С такие программисты
24 Smallrat
 
07.07.21
11:34
(0) если строка параметров не переносится на другую строку, то непонятно в чем проблема: читаем построчно, выделяем число, найдя первую запятую, после нее находим кавычки с помощью СтрНайти(), находим закрывающие кавычки также - все что между ними разделяем с помощью СтрРазделить(), идем дальше по строке, ища следующую запятую, выделяем число и т.д. по окончанию строки переходим к следующей.
25 Bigbro
 
07.07.21
11:35
(23) я достаточно повидал csv на своем веку. и в 1с и в САП работая.
чтобы тупые ссылки на RFC отметать как бред.
не будет у вас никогда реальный файл соответствовать какому то стандарту. не будет.
26 Ногаминебить
 
07.07.21
11:35
(20) Да, не вчитался в текст, так отработает если внутри строки кавычек нет конечно. На что я бы не закладывался.
Ну и если (12) прав - тогда вообще финиш.
27 Bigbro
 
07.07.21
11:36
(24) он же написал - в том тексте, что между ними могут быть еще запятые. увы.
28 Smallrat
 
07.07.21
11:40
(27) мне кажется (0) не это имел в виду, а то что у него в параметрах идет перечисление строк через запятую. Если у него в строках встречаются запятые - то тут просто работает правило - если ты можешь разобрать этот текст вручную на бумажке, значит можно написать алгоритм, если нет, то нет.
29 Bigbro
 
07.07.21
11:42
поэтому я и попросил пример файла или строки из него.
а то гении заклевали.
30 Вафель
 
07.07.21
11:42
где-то тут недавно преобразователь в дбф таких файлов кидали
31 acht
 
07.07.21
11:42
(25) > тупые ссылки на RFC отметать как бред.
Программисты 1С такие программисты
32 ДенисЧ
 
07.07.21
11:44
(29) А что, в (0) нет примера?
"Программисты 1С такие программисты" (с)

ЗЫ. Теперь я начинаю понимать, почему бухгалтерия не любит многих из нас... ((
33 Вафель
 
07.07.21
11:47
34 Fragster
 
гуру
07.07.21
14:42
да уж,и ведь тут профессионалы собрались. в (33), кстати, есть ado и он единственный (вроде), не глючит из того, что там есть на сложных примерах. ну, может еще а простыни кода тоже работают норм, но явно не так быстро, как ADO или внешний источник.
35 ДенисЧ
 
07.07.21
14:52
(34) Адо уже deprecated, нужно использовать микросервисы на голанге.
36 T1C
 
07.07.21
18:34
(5) Я всегда тильду в качестве разделителя использую )
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший