Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Вниз

ANSI код символа EOF   Найти похожие ветки 

 
leonidus ©   (2005-10-06 14:01) [0]

Люди подскажите пожалуйста ANSI код символа EOF. Дело в том, что в результате кодирования тектового файла путем изменения ANSI кодов каждого символа в соответсвии с ключом кодирования где-то в середине файла появляется знак EOF и потом при чтении этого файла программа на этот моменте "запинается" т.е. считает что файл уже весь считан, хотя это не так. Как мне узнать код символа EOF, что бы еще на этапе кодирования если такой символ получается просто заменять его на безобидный символ?


 
clickmaker ©   (2005-10-06 14:04) [1]

какая программа? твоя?


 
leonidus ©   (2005-10-06 14:06) [2]

да


 
clickmaker ©   (2005-10-06 14:12) [3]

и кто тебе мешает читать до конца файла, а не до этого символа?


 
Германн ©   (2005-10-06 14:16) [4]

Вообще-то где-то, когда-то было такое. $15 считался признаком конца файла. Но не знаю я как написать программу, которая на нем "запиналась" :(


 
leonidus ©   (2005-10-06 14:17) [5]

я делаю так:

f_:=tstringlist.Create;
f_.LoadFromFile(Edit2.Text+"code");
st:="";
for i:=0 to f_.Count-1 do
 st:=st+f_.Strings[i];
f_.Free;

так вот в этом случае чтение ведется до первого символа EOF.

Пробовал читать BlockRead, нормально, но очень долго.


 
isasa ©   (2005-10-06 14:20) [6]

$1A (Ctrl+Z) ?


 
Bel ©   (2005-10-06 14:21) [7]

Если мне не изменяет память, символ конца файла = 26 = #1A.


 
clickmaker ©   (2005-10-06 14:24) [8]


> leonidus ©   (06.10.05 14:17) [5]

а ты уверен, что у тебя в файле нет символов с кодом 0? Тогда надо либо наследовать стринглист и переписывать SetTextStr, либо читать как бинарник, можно API - CreateFile / ReadFile. И я не верю, что это дольше. СтрингЛист-то в конечном итоге все равно к АПИ обращается.


 
Германн ©   (2005-10-06 14:28) [9]

Ну и глупо закодированный файл "пихать" в StringList ДО перекодировки.


 
MBo ©   (2005-10-06 14:29) [10]

Если кодировать текст таким образом, то файл уже не текстовый, и обращаться с ним нужно соответствующим образом. Нужен закодированный текстовый - значит, нужно правильно кодировать.
Ни к чему разные вещи смешивать.


 
Leonid Troyanovsky ©   (2005-10-06 14:30) [11]


> Германн ©   (06.10.05 14:16) [4]
> $15 считался признаком конца файла.


AFAIK, это был  Ctrl+Z, т.е. $1E.  

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2005-10-06 14:33) [12]


> Leonid Troyanovsky ©   (06.10.05 14:30) [11]

> AFAIK, это был  Ctrl+Z, т.е. $1E.


$1A, sorry.
Ну, тут уже и без этого разобрались.

--
Regards, LVT.


 
leonidus ©   (2005-10-06 14:37) [13]

>clickmaker да нет вроде символов с кодом 0 нет. Я кодирую так:

const
key="abc"
...
...
begin

//читаем не кодированный текстовый файл помещая его в одну строчку
st:=""
for i:=0 to f.Count-1 do
st:=st+f.Strings[i];

//шифруем его
n:=0;
for i:=1 to length(st) do
 begin
  inc(n);
  if n>length(key) then n:=1;
  kod:=ord(st[i])+ord(key[n]);
  if kod=0 then
    st[i]:="_"
   else
    st[i]:=chr(kod);
 end;

и где может быть трабла?


 
leonidus ©   (2005-10-06 14:39) [14]

может есть более протые и быстрые методы кодирования текстовых файлов? тут критично не время шифромания, а время дешифрования, т.е. файл шифруется один раз а расшифровывается в программе довольно часто


 
clickmaker ©   (2005-10-06 14:44) [15]

ну для начала я бы писал так
if (kod = 0) or (kod > 255) then
 st[i] := "_"

VCL при чтении файла не юзает никаких EOF, кроме реального конца файла. Можешь убедиться, открыв исходники и проследив TStrings.ReadFromFile -> ReadFromStream -> TFileStream.Read -> FileRead -> ReadFile. Последний - АПИшный вызов, ему на все символы, включая EOF и пр. глубоко фиолетово, он читает файл как есть
Трабла скорей всего в стринглисте


 
Anatoly Podgoretsky ©   (2005-10-06 14:56) [16]

leonidus ©   (06.10.05 14:01)  
Ошибка в постановке, у тебя не текстовый файл соответвтвенно с ним надо работать как с двоичным.

leonidus ©   (06.10.05 14:39) [14]
Нельзя работать с закодированным файлом как с текстовым, в нем все коды от 0 до 255, надо его упаковывать, тогда пойдут и методы работы с текстовыми файлами.


 
leonidus ©   (2005-10-06 15:14) [17]

что значит упаковать, zip`ом?


 
leonidus ©   (2005-10-06 16:07) [18]

>clickmaker а почему символы больше 255 исключать? дело в том что у меня при суммировании: kod:=ord(st[i])+ord(key[n]); kod как правило больше 255 получается....


 
Anatoly Podgoretsky ©   (2005-10-06 16:48) [19]

leonidus ©   (06.10.05 15:14) [17]
ЗИП не подходит -  это точно такой же двоичный формат, нужна транспортная упаковка, например HEX ил Base64, UUE


 
clickmaker ©   (2005-10-06 17:02) [20]


> leonidus ©   (06.10.05 16:07) [18]

потому что, если у тебя не unicode, то код символа должен быть от 0 до 255 - 1 байт то бишь


 
leonidus ©   (2005-10-06 22:10) [21]

Я прочел нормально файл из потока:

FS := TFileStream.create(...);
try
 SetLength(Str, FS.Size);
 FS.Read(Pointer(Str)^, Length(str));
finally
 FS.Free
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.044 c
2-1128492682
Серг73
2005-10-05 10:11
2005.10.30
ADO+Acess


1-1128926770
Zhekson
2005-10-10 10:46
2005.10.30
Полоса прокрутки в DBGrid


2-1128832103
intel
2005-10-09 08:28
2005.10.30
создание папки


6-1121239399
kot andrei
2005-07-13 11:23
2005.10.30
запрос пароля


4-1124822100
_silver
2005-08-23 22:35
2005.10.30
Работа с COM портом, не пойму где ошибка.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский