Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TStringList и OEM-866  [new]
Volik
Member

Откуда:
Сообщений: 51
Добрый день. Столкнулся с проблемой разбивки строки по разделителю, используя TStringList.
У меня есть файл с текстом в кодировке OEM-866.
В ней же я гружу текст:
list1.LoadFromFile(FileFolder + fileName1, TEncoding.GetEncoding('866'));

В отладчике текст отображается корректно.
Затем создаю еще 1 TStringList, пишу
list.DelimitedText := list1[0];
list.Delimiter := '╫'; // Такой разделитель

В итоге list.Count = 1, хотя в строке у меня разделителей несколько штук.
В чем проблема может быть? Может в том, что код разделителя в кодировке OEM-866 = 215, а в UTF-8 (модуль в такой кодировке) = 9579?
Тогда как правильно указать значение св-ва list.Delimiter?
5 окт 17, 08:37    [20844146]     Ответить | Цитировать Сообщить модератору
 Re: TStringList и OEM-866  [new]
Dunkin
Guest
Volik
list1.LoadFromFile(FileFolder + fileName1, TEncoding.GetEncoding('866'));

Утечка. GetEncoding для всех нестандартных кодировок создаёт новый объект.
После загрузки текст в списке в кодировке Unicode (для Delphi). Вот в этой кодировке и нужен разделитель.
5 окт 17, 08:55    [20844166]     Ответить | Цитировать Сообщить модератору
 Re: TStringList и OEM-866  [new]
GunSmoker
Member

Откуда:
Сообщений: 2935
'╫' - это ты на каком языке сейчас ругнулся?
5 окт 17, 09:23    [20844213]     Ответить | Цитировать Сообщить модератору
 Re: TStringList и OEM-866  [new]
Volik
Member

Откуда:
Сообщений: 51
Короче, хз почему так, но вначале инициализировав Delimiter, а уже потом DelimitedText, все заработало!
5 окт 17, 09:38    [20844247]     Ответить | Цитировать Сообщить модератору
 Re: TStringList и OEM-866  [new]
schi
Member

Откуда: Москва
Сообщений: 2357
Volik
Короче, хз почему так, но вначале инициализировав Delimiter, а уже потом DelimitedText, все заработало!


Потому что DelimitedText использует свойство Delimiter, справку надо читать.
5 окт 17, 11:46    [20844779]     Ответить | Цитировать Сообщить модератору
 Re: TStringList и OEM-866  [new]
чччД
Guest
Volik
Добрый день. Столкнулся с проблемой разбивки строки по разделителю, используя TStringList.
У меня есть файл с текстом в кодировке OEM-866.
В ней же я гружу текст:
list1.LoadFromFile(FileFolder + fileName1, TEncoding.GetEncoding('866'));

В отладчике текст отображается корректно.
Затем создаю еще 1 TStringList, пишу
list.DelimitedText := list1[0];
list.Delimiter := '╫'; // Такой разделитель

В итоге list.Count = 1, хотя в строке у меня разделителей несколько штук.
В чем проблема может быть? Может в том, что код разделителя в кодировке OEM-866 = 215, а в UTF-8 (модуль в такой кодировке) = 9579?
Тогда как правильно указать значение св-ва list.Delimiter?

Ты сперва Delimiter задай, а потом уже DelimitedText.
5 окт 17, 12:42    [20845070]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить