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

Ваш аккаунт

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

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

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

Кривая запись в файл!

67K
01 июня 2011 года
Mr.Wolf72
7 / / 02.05.2011
Добрый день, форумчане. Раньше я никогда данные в файл не записывал, но сейчас решил узнать и это. После небольшого ознакомления сделал вот такой код:
Код:
var a: extended;
    fd: file of extended;
    fdname: string;

begin
WriteLn('Ololo vedi nazvanie faila'); readln(fdname);
assign(fd, fdname);
a:=200;
rewrite(fd);
repeat
write(fd, a);
a:=a+1;
until a=1000;
close(fd);
WriteLn('Ololo vse sdelano!');
readln;
readln;
end.


Запись в файл идет, но в него записываются не числа, а символы и к ним сзади идут числа: ñòóôõö÷øùúûüýþÿ
Почему так выходит и как исправить данную проблему? Помогите, пожалуйста.:)
14
01 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Код вроде правильный, так что дайте кусок hex дампа файла..
278
01 июня 2011 года
Alexander92
1.1K / / 04.08.2008
Mr.Wolf72, когда будете дамп делать, может, сами себе на вопрос и ответите. :)
316
01 июня 2011 года
Alm3n
889 / / 29.05.2009
наверное, дело в размере extended типа и в его представлении. было бы хорошо потестить с integer, например. или с переводом числа в строку. а вообще, для записи в файл чисел(не строк), хорошо открывать его, как не типизированный
416
02 июня 2011 года
MaitreDesir
380 / / 02.01.2008
Все происходит правильно (насколько я понял). Вы объявляете тип файла file of extended. Соответственно, для программы это типизированный файл, состоящий из "кусков" по sizeof(extended). Когда вы его открываете не как файл of extended, то данные читаются не по таким "кускам", а по 1 байту (в крайнем случае по 2) и в соответствии с кодировкой преобразуются в символы. Если файл нужен в "читабельном" формате, то надо использовать текстовый файл (вместо file of extended пиши text вроде, но тип уже не помню какой в паскале, для дельфи - textfile).
Работать с ним также как и с типизированным, в результате работы твоего кода получаем:
 
Код:
2.00000000000000E+0002 2.01000000000000E+0002 2.02000000000000E+0002 2.03000000000000E+0002 2.04000000000000E+0002 2.05000000000000E+0002 2.06000000000000E+0002 2.07000000000000E+0002 2.08000000000000E+0002 2.09000000000000E+0002 2.10000000000000E+0002 2.11000000000000E+0002
.......

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