Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение бинарного файла в TMemo.

1.8K
29 июня 2007 года
BIKTOP
91 / / 06.04.2005
Есть бинарный файл, содержаший текстовые сообщения от ... (не важно).
Проблема в том, что про заталкивании в тупую этих данных в TMemo, не отображаются переносы строк, весь текст записывается одной сплошной строкой, а переводы на новую строку заменяются квадратиками.

Вот пример.

Так правильно:

04:26:10
1225,317,Too many frame errors
HALFID=A- ACTIVE TYPOBJ=T3- LINE OBJNME= 24
LINENUM= 24 CAUSE=11 DIAG=90 LINSTS=OP JUNC=83 TYPETCD= 5

>>

---EVE,UK011 ,2006-12-17 04:27:52
1226,317,Too many frame errors
HALFID=A- ACTIVE TYPOBJ=T3- LINE OBJNME= 24
LINENUM= 24 CAUSE=11 DIAG=90 LINSTS=OP JUNC=83 TYPETCD= 5

>>

А так отображается в TMemo:

04:26:10 1225,317,Too many frame errors HALFID=A- ACTIVE TYPOBJ=T3- LINE OBJNME= 24 LINENUM= 24 CAUSE=11 DIAG=90 LINSTS=OP JUNC=83 TYPETCD= 5 >> ---EVE,UK011 ,2006-12-17 04:27:52 1226,317,Too many frame errors HALFID=A- ACTIVE TYPOBJ=T3- LINE OBJNME= 24LINENUM= 24 CAUSE=11 DIAG=90 LINSTS=OP JUNC=83 TYPETCD= 5 >>


Подскажите плз, как решить проблему.

ЗЫ. Для открытия файла применял TMemoryStream.LoadFromFile().
303
29 июня 2007 года
makbeth
1.0K / / 25.11.2004
Посмотри, как в файле обозначены переносы строк. Должна быть последовательность символов #13#10 ($0D$0A; 0x0D,0x0A).
Вообще, по идее, коль уж это бинарный файл, надо его самому переводить в текст.
1.8K
30 июня 2007 года
BIKTOP
91 / / 06.04.2005
В конце каждой строки стоит $0A (без $0D).
261
01 июля 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: BIKTOP

ЗЫ. Для открытия файла применял TMemoryStream.LoadFromFile().


а чем не устраивает TMemo.Lines.LoadFromFile()

в качестве одного из решений можно предложить перед загрузкой в МЕМО прочесать побайтово файл и вставить 0x0D перед каждым 0x0A

1.8K
05 июля 2007 года
BIKTOP
91 / / 06.04.2005
Цитата: ahilles
а чем не устраивает TMemo.Lines.LoadFromFile()


Не устраивает тем, что в мемо надо загружать не весь файл, а лишь отслеживать его изменения.

Цитата: ahilles

в качестве одного из решений можно предложить перед загрузкой в МЕМО прочесать побайтово файл и вставить 0x0D перед каждым 0x0A


Ну, собственно я это сделал только вот в такой способ:

MainForm.logMemo.Lines.Add(AnsiReplaceStr(buffer,#10,#13#10));

Все, нормально, только в конце появляется символ с кодом 0x16 (в виде пустого квадратика). Причем всегда, даже если прогонять простой текстовый файл с нормальными переводами строк (#13#10).

Даже если делать совсем тупо, ну типа так:
b := '';
for i := 1 to length(buffer) do
begin
if buffer = #10 then
b := b + #13 + buffer
else
b := b + buffer;
end;
Все-равно в конце вылазит это символ.
З.ы. Сам файл редактировать нельзя.

10
06 июля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: BIKTOP
Ну, собственно я это сделал только вот в такой способ:

MainForm.logMemo.Lines.Add(AnsiReplaceStr(buffer,#10,#13#10));


А чем AdjustLineBreaks не подходит?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог