|
работа с текстовым файлом | ☑ | ||
---|---|---|---|---|
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) Я всегда тильду в качестве разделителя использую )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |