Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2011, 01:10
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию Сохранение текста в файл

Возникла проблема при сохранении текста в файл. В Memo2 есть текст (см. рис.) использую обычную команду сохранения текста в файл
Код:
Memo2.Lines.SaveToFile(SaveDialog1.FileName);
Сохранятся, ошибок нету. Но вот открывая его потом отдельно в блокноте или загружая его в Memo1 получатся не совсем то что должно быть (см. рис.) сравнение.

Текст является случайным набором ASII символов 1-255 возможно требуется особый метод сохранения. Подскажите пожалуйста.

Последний раз редактировалось Kaktuz, 23.11.2011 в 01:18.
Ответить с цитированием
  #2  
Старый 23.11.2011, 01:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В таком наборе, содержатся спец. символы #10 и #13, являющиеся разделителями строк. Попробуй загрузить в StringList, а затем присвоить к Memo как Text.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 23.11.2011, 02:02
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Код:
procedure TForm1.Button5Click(Sender: TObject);
var
  animals : TStringList;
begin
  animals := TStringList.Create;
  animals.Add('текст');
  Memo2.Text:=(animals[0]);
end;
С преобразованием что-то не пойму как его...
Надо получается считывать данные напрямую с файла...
Ответить с цитированием
  #4  
Старый 23.11.2011, 02:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Примерно так, если не вру:
Код:
procedure TForm1.Button5Click(Sender: TObject);
var
  animals : TStringList;
begin
  animals := TStringList.Create;
  animals.LoadFromFile(OpenDialog1.FileName);;
  Memo2.Lines.Text := animals.text;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 23.11.2011, 02:49
jie4e jie4e вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 2
Репутация: 10
По умолчанию

помогите мне с темой ниже
Ответить с цитированием
  #6  
Старый 23.11.2011, 08:55
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Тоже самое что и при обычной загрузке...
Ответить с цитированием
  #7  
Старый 23.11.2011, 09:13
Last Living Man Last Living Man вне форума
Прохожий
 
Регистрация: 10.11.2011
Сообщения: 25
Репутация: 513
По умолчанию

Блокнот не понимает кодировку ASCII... Посмотри просмотрщиком тотала, если он не распознает кодировку, поставь вручную...

Еще полезная ф-я для мемо, чтоб она понимала ASCII:
Код:
Memo1.Font.Handle := GetStockObject(OEM_FIXED_FONT);
либо
Код:
Memo1.Font.Handle := GetStockObject(ANSI_FIXED_FONT);

Последний раз редактировалось Last Living Man, 23.11.2011 в 09:15.
Ответить с цитированием
  #8  
Старый 23.11.2011, 14:36
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от Last Living Man
Блокнот не понимает кодировку ASCII... Посмотри просмотрщиком тотала, если он не распознает кодировку, поставь вручную...
Кок раз то все наоборот получается. Стандартный блокнот правильно открывает текст и показывает все в одну строку (как положено), а вот AkelPad от Total открывает как и в Memo (не правильно) Определяя одиночный символ типа #10 или #13 как полноценный перенос что приводит уже к преобразованию с одного символа в два символа.
Да и эти две команды как-то ни как не повлияли на результат. Если я правильно понял, нужно использовать одну из предложенных команд перед сохранением текста.

Возможно есть способ прочитать текст с файла сразу в Edit типа String в одну строку, может прокатит.

Последний раз редактировалось Kaktuz, 23.11.2011 в 14:42.
Ответить с цитированием
  #9  
Старый 23.11.2011, 22:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Честно говоря, я не понял цели этого мазохизма.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 23.11.2011, 22:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

вопрос в том какие версии винды и дельфи и какие региональные настройки стоят в винде.
Ответить с цитированием
  #11  
Старый 24.11.2011, 01:08
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Честно говоря, я не понял цели этого мазохизма.
для шифрования данных.

Нашел вот еще такой способ, но он некоторые символы не читает.
Код:
var a:TextFile;
     b:String;
begin
AssignFile(a,'C:\Text.txt');
{$I-}
Reset(a);
{$I+}
ReadLn(a,b);
Memo1.Text:=b;

В целом ответ я знаю. Знаю как сделать, но не знаю как прописать... Нужно использовать HEX преобразователь. Читать файл как hex записывать данные в переменную (получится что-то вроде DF0DD0CBD3CC20D7CFD5...) после чего это все преобразовывается уже в нужные символы (Я□ФЛУМ□ ЧП...)
Начало было тут...

Последний раз редактировалось Kaktuz, 24.11.2011 в 01:25.
Ответить с цитированием
  #12  
Старый 24.11.2011, 01:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Используй Read, ReadLn читает строку, или BlockRead.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 24.11.2011, 01:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

ReadLn - это сокращение от ReadLine, читает строку.
А вот еще способ:
Код:
var f:file;
     s:string;
...
AssignFile(f,'C:\Text.txt');
Reset(f,1);
SetLength(s,FileSize(f));
BlockRead(f,pointer(s)^,FileSize(f));
CloseFile(f);
Как-то так должно сработать и загрузить все байты из файла в строку. Хотя может где-то и ошибся.
Especially for masochists.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #14  
Старый 24.11.2011, 14:21
Last Living Man Last Living Man вне форума
Прохожий
 
Регистрация: 10.11.2011
Сообщения: 25
Репутация: 513
По умолчанию

Цитата:
Сообщение от Kaktuz
Да и эти две команды как-то ни как не повлияли на результат. Если я правильно понял, нужно использовать одну из предложенных команд перед сохранением текста.
Не знаю почему у тебя не катит. Я использовал эти ф-и при написании сборщика файлов (в кодировке ASCII как правило от кривых досовских программ, используемых в нашей организации), с функцией просмотра... Мемо начинает правильно отображает ASCII файлы, но помоему шрифт изменить не удастся... Если надо могу исходник дать (DLL).
Да кстати! файл в ASCII надо сохранять через тип text, если ты его делаешь с нуля. Так проще, т.к. все "невидимые" символы сами проставляются...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025