|
|
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
Имеется csv-файл в кодировке UTF-16 (надо и русский язык, и европейский - буквы с точками) 1|4503680000275||0||Джинсы|ÄÄÄÄ||||50x55|307|73|10.70|0.10|7.40|2.60|5.50|0.73|1.00|3.10|p|2|4503680000415||0||Валенки|ÖÖÖÖ||||50x55|341|81|9.10|8.00|6.30|0.50|0.00|0.00|6.00|2.90|t| Вот они тут, кстати, и не отображаются. Разделитель - символ |. Перепробовал по разному сам csv файл - и с заголовком BOM (вроде так называается) и получаю яю1 в первой ячейке, а так же и без. Проблема в том, что очевидно мой файл неправильного формата - пробую если LoadFromCSV - без результата. Если как текст построчно, то получается, НО есть строки с очень длинным тестом и там где не влезает (т.е. на вторую строку перенос), вылетает. Как это победить? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 08:33 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
а версию делфи сообщить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 09:36 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
Dephi 7. Использую TNT (если применительно к ситуации это имеет значение). Почему короткие строки (по одному значению) - обрабатываются нормально, а с разделителями такие проблемы? Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:42 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
На счет длинных строк. Предполагаю что у тебя "длинные"="содержащеи пробелы". Не знаю чем пользуется TNT и что это вообще такое, однако именно в D7 разделение CSV на поля средствами TStringList имеет особенности. Символ пробела внутри поля воспринимается так же как разделитель полей. Для того что бы избежать этого, нужно что бы поля содержащие пробелы были корректно окавычены функцией AnsiQuitedStr(), т.е. строка обрамляется кавычками ", а если они встречаются внутри строки - то там удваиваются. В более поздних версиях Delphi эту проблемку с пробелами вроде как решили. Если ты сам формируешь этот CSV то проще окавычить поля с пробелами, или вообще все поля. Если CSV тебе дается свыше, от другого софта - то тут придется либо писать свой разборщик либо искать более другой компонент. Может быть кто-то подкинет исходник TStringList от версии Delphi где это уже решено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 03:50 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
НеКомпетент(т.е. на вторую строку перенос), вылетает.Может этот класс поможет https://www.codeproject.com/tips/783493/WebControls/ • Field quoting allows multi-line field values and presence of quote and field separator characters within the field. By default, it is assumed that field may or may not be enclosed in quotes but reader can be instructed not to use field quoting. • Quote character by default is double quotes (0x22) but virtually any (Unicode) character can be used. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 04:15 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
НеКомпетентDephi 7.ma1tusМожет этот класс поможетпропустил, не поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 04:28 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
Использую TNT компоненты для отображения юникода, который Дельфи не поддерживает. Файл готовлю сам в другой программе, поэтому все текстовые поля сделаю в " - кавычках. И посмотрю что получится. В качестве разделителя - символ | - просто как гарантия того, что его не используют в тексте Если открыть текстовый файл напрмер в блокноте, то реально есть строки более 1024 символов и строка переносится на другую строку. Полагаю, в Дельфи ReadLn так же и видит строку до 1024 символов Если открыть в Excel как csv, то нормально, НО Excel нормально откроет только если есть BOM, а он его (файл) распознает странно - тот самый BOM выдает за первую ячейку, "ЯЮ1".... Учитывая все это, наиболее реальный вариант решения проблемы - именно csv и типа commatext, наверное. Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 08:36 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
DelimitedText я имел ввиду Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 08:40 |
|
||
|
CSV в StringGrid
|
|||
|---|---|---|---|
|
#18+
НеКомпетентИспользую TNT компоненты для отображения юникода, который Дельфи не поддерживает. Файл готовлю сам в другой программе, поэтому все текстовые поля сделаю в " - кавычках. И посмотрю что получится. В качестве разделителя - символ | - просто как гарантия того, что его не используют в тексте Если все поля кавычить - то разделитель вообще без разницы, главное что бы с кавычками не совпадал :) НеКомпетентЕсли открыть текстовый файл напрмер в блокноте, то реально есть строки более 1024 символов и строка переносится на другую строку. Это не перенос а способ отображения длинных строк. В блокноте есть настройка которая говорит заворачивать длинные строки или нехай будут как есть, уходящие за правый край и c горизонтальным скроллом. В блокноте на WinXP эта настройка тут: <Формат><перенос по словам> НеКомпетентПолагаю, в Дельфи ReadLn так же и видит строку до 1024 символов Я не в курсе на ограничение длины строки в Delphi, тем более юникодной, но никакой связи с переносом строки в блокноте тут нет. Невредно так же почитать rfc на CSV https://ru.wikipedia.org/wiki/CSV http://www.rfc-editor.org/rfc/rfc4180.txt http://tradeincome.ru/useful-content/RFC 4180 rus.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 09:01 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39647878&tid=2040867]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
206ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 570ms |

| 0 / 0 |
