Имя: Пароль:
1C
1C 7.7
v7: Помогите прочитать строку с символом переноса
,
0 Бамагите
 
03.09.19
18:58
Имеется csv файл с разделителем ;
11 тыс строк и 900 колонок
в одном из значений закрался символ переноса строки
в итоге метод ПолучитьСтроку() возвращает строку не полностью :(
метод ReadLine() от фсо выдает тоже самое
как мне прочитать строку полностью?
https://pastenow.ru/6LGQ6
1 Злопчинский
 
03.09.19
19:01
(0) как только ответишь как понять что данный перенос строки не конец данных по строке
2 Fragster
 
гуру
03.09.19
19:02
используй адодб с драйвером текст
3 Fragster
 
гуру
03.09.19
19:02
а если он не жрет - значит тот, кто делал этот цсв - чудак
4 Злопчинский
 
03.09.19
19:02
Правильный подход: при формировании выгрузки удалять из выводимых строк несимвольные значения
5 Злопчинский
 
03.09.19
19:03
(2) т что, это поможет решить проблему ТС? как?
6 Бамагите
 
03.09.19
19:07
(1) Иксель и ОО это как-то понимают... Наверное по символу 13. Но не могу же я весь этот огромный файл перебирать посимвольно.
7 HawkEye
 
03.09.19
19:09
(0) посчитай в полученной строке кол-во разделителей, если их меньше чем в предыдущей, значит надо прочитать и следующую...

дарю:
СтрЧислоВхождений(<?>,)
Синтаксис:
СтрЧислоВхождений(<СтрИсточник>,<СтрПодстрока>)
Назначение:
Возвращает число вхождений строки шаблона поиска в строку поиска.
Параметры:
<СтрИсточник> - строка в которой ищем (место поиска);
<СтрПодстрока> - строка которую ищем (шаблон поиска).
8 Russiagreat
 
03.09.19
19:10
(6) можешь
9 Злопчинский
 
03.09.19
19:11
Вот примерный текст

КоличествоЗапятых = 10; //сколько полей, считаем что запятый внутри полей нет
ПредыдущаяПрочитаннаяСтрока = "";
КС = Т.КоличествоСтрок();

Для ы=1 по КС Цикл
  Стр = Т.ПолучитьСтроку(ы);
  Если ПустаяСтрока(ПредыдущаяПрочитаннаяСтрока)=0 Тогда //нештатная ситуация
     Стр = Стр+ПредыдущаяПрочитаннаяСтрока;
     ПредыдущаяПрочитаннаяСтрока = "";
     //ОТЛАДКА:
     Сообщить(Стр);
     //что-то нужное делаем со строкой Стр
     Продолжить;
  КонецЕсли;
  
  //здесь если все штатно
  Если СтрЧислоВхождений(Стр,",")<>КоличествоЗапятых Тогда //внезапный разрыв
     ПредыдущаяПрочитаннаяСтрока = Стр;
     Продолжить;
  КонецЕсли;

  //ОТЛАДКА:
   Сообщить(Стр);

КонецЦикла;
10 Злопчинский
 
03.09.19
19:12
(7) ты - знал!
11 HawkEye
 
03.09.19
19:12
(10) я стар ))))
12 Злопчинский
 
03.09.19
19:13
вот, кстати, как в Экселе в строковой ячейке принудительно вставить перенос?
13 Бамагите
 
03.09.19
19:14
(7)(9) Спасибо!
14 Fram
 
03.09.19
19:24
(12) alt+enter
15 Злопчинский
 
03.09.19
19:33
(14) спсб
16 Garykom
 
гуру
03.09.19
21:33
(7) >посчитай в полученной строке кол-во разделителей, если их меньше чем в предыдущей, значит надо прочитать и следующую...

Формат CSV разрешает символы разделителей внутри строк в "";""

"Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ("). Если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд."
17 Злопчинский
 
03.09.19
21:35
(16) сие непринципиально, это уже технический момент.
18 Garykom
 
гуру
03.09.19
21:37
(17) Решение этого технического момента не совсем тривиально кто не знаком с теорией https://ru.wikipedia.org/wiki/Конечный_автомат или парсерами
19 HawkEye
 
03.09.19
21:39
(16) разве, это такая неразрешимая проблема?
20 Garykom
 
гуру
03.09.19
21:40
(19) Попробуй ))
21 HawkEye
 
03.09.19
21:45
(20) в чем проблема то заменить одну комбинацию с точкой запятой, на другую без точки запятой? вечно ты пытаешься что-то усложнить...  "не множь сущности без необходимости" (с)
22 Garykom
 
гуру
03.09.19
21:50
(21) Проблема в том чтобы понять когда надо заменять а когда не надо.

"123",0,"", \n "",1,"321","",,,,,,,,""

Можно заменять ))
23 Garykom
 
гуру
03.09.19
21:53
(22)+ Причем часто отступают от стандарта "двойных кавычек" и получаются извраты как в примере https://ru.wikipedia.org/wiki/CSV

Исходный текст:

1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture «Extended Edition»","",4900.00
1996,Jeep,Grand Cherokee,"MUST SELL! air, moon roof, loaded",4799.00
Результирующая таблица:

1997    Ford    E350    ac, abs, moon    3000
1999    Chevy    Venture «Extended Edition»        4900
1996    Jeep    Grand Cherokee    MUST SELL! air, moon roof, loaded    4799
24 Garykom
 
гуру
03.09.19
21:54
(23)+ Лишние запятые в сочетании с лишними переносами строк делают бесполезным совет (7)
25 Garykom
 
гуру
03.09.19
21:59
(22) Сорри ошибся в забыл удвоить кавычки внутри, правильная CSV строка:
"123",0,""", \n """,1,"321",""",,,,,,,,"""
26 Garykom
 
гуру
03.09.19
22:00
(25) Читается как
123
0
", \n "
1
321
",,,,,,,,"
27 Fragster
 
гуру
04.09.19
10:06
(5) обычно совершенно. adodb жрет csv только в путь, и не надо заморачиваться с парсингом кавычек и разделителей
28 Сияющий в темноте
 
04.09.19
10:54
кавычки можно не только двоить,но и экранировать через \,но это уже адо не ест.
29 Fragster
 
гуру
04.09.19
11:08
(28) это локальная придумка, либо ваша, либо того, с кем вы обмениваетесь. по стандарту - двоить.
30 Fragster
 
гуру
04.09.19
11:09
для изучения и тыкания: https://tools.ietf.org/html/rfc4180