Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2015, 02:40   #1
Powerstrie
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 10
Сообщение Помощь с файлами.

Задание такое: Создать типизированный файл целых чисел и поместить в него 10 случайных чисел.
Я создаю следующий код, на мой взгляд абсолютно верный :
Код:
program lab10;
const N=10;

var noob:file of integer;
    i,o:integer;
begin
randomize;
assign(noob,'C:\lol.txt');
rewrite(noob);
for i:=1 to 10 do begin
o:=random(50);
write(noob,o);
end;
close(noob);
end.
После чего я запускаю программу и вижу в текстовом файле след . картину :

Тоесть, заместо чисел в диапозоне от 0 до 50 в файл записываются символы. В чем проблема ?
Powerstrie вне форума Ответить с цитированием
Старый 03.02.2015, 04:01   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

writeln(noob,IntToStr(o));
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 03.02.2015, 04:34   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Powerstrie, все правильно сделал. Просто для проверки зря использовал блокнот. Блокнот понимает все байты файла как коды символов. Один байт - один символ ( если Блокнот не в Unicode).
То есть если например будет число 48 , то отобразится не 48, а 0, потому что код символа 0 как раз 48.
А числа от 0 до 31 - это вообще коды всяких управляющих сиволов, типа стрелок, забоя и т.д.

Это не текстовый файл, а типизированный file of integer;. Для числа типа Integer выделяется по 4 байта, у тебя числа все не более 50, поэтому первые 3 байта в каждом числе = 0, и поэтому пробелы между символами.

Последний раз редактировалось type_Oleg; 03.02.2015 в 04:44.
type_Oleg вне форума Ответить с цитированием
Старый 03.02.2015, 09:26   #4
Powerstrie
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Powerstrie, все правильно сделал. Просто для проверки зря использовал блокнот. Блокнот понимает все байты файла как коды символов. Один байт - один символ ( если Блокнот не в Unicode).
То есть если например будет число 48 , то отобразится не 48, а 0, потому что код символа 0 как раз 48.
А числа от 0 до 31 - это вообще коды всяких управляющих сиволов, типа стрелок, забоя и т.д.

Это не текстовый файл, а типизированный file of integer;. Для числа типа Integer выделяется по 4 байта, у тебя числа все не более 50, поэтому первые 3 байта в каждом числе = 0, и поэтому пробелы между символами.
Какую программу лучше использовать для проверки?

Цитата:
Сообщение от Slym Посмотреть сообщение
writeln(noob,IntToStr(o));
"ЛАБА 10.pas(12) : Нельзя преобразовать тип string к integer"
Powerstrie вне форума Ответить с цитированием
Старый 03.02.2015, 09:37   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Powerstrie, вы в коде всё абсолютно верно написали, type_Oleg всё верно вам объяснил.

Ваша ошибка:
Цитата:
После чего я запускаю программу и вижу в текстовом файле след . картину :
Как правильно сказали, у Вас НЕ ТЕКСТОВЫЙ файл.


Цитата:
Какую программу лучше использовать для проверки?
только написанную Вами же. Типизированные файлы можно писать/читать/изменять только программным образом.
напишите, например, такую программу для проверки:
Код:

program labTest;

var 
   noob:file of integer;
   o:integer;
begin
  assign(noob,'C:\lol.txt');
  reset(noob);
  WriteLn('Число записей (чисел) в файл = ', FileSize(noob));
  WriteLn('Содержимое файла: ');
  while not eof(noob) do begin
     Read(noob,o);
     Write(o,' '); {выводим числа в одну строчку через пробел}
  end;
  WriteLn;
  close(noob);
  Readln; {задержим закрытие программы до нажатия ENTER}
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.02.2015, 11:23   #6
Powerstrie
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 10
По умолчанию

Огромное спасибо за помощь всем отозвавшимся. Вопрос решен.
Powerstrie вне форума Ответить с цитированием
Старый 03.02.2015, 21:27   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Powerstrie
Если еще появишся тут, то как вариант для просмотра - FAR.
В нем есть возможность просматривать как Hex так и ASCII.
А если все понял, то попробуй создать небольшой типизированный файл, в котором будут смешаны текст и числа, в том числе и, например, с типом real.
Это можно сделать с использованием записей (record).

Покопайся FAR'ом...



Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 03.02.2015, 22:56   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Powerstrie
Если еще появишся тут, то как вариант для просмотра - FAR. ...
Я кстати тоже хотел предложить для просмотра байтов, но только DiscoCommander ( сам пользуюсь по привычке), или Norton.. или Volkov.. Кнопка F3. Правда там в 16-ричном коде.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь при работе с двумя файлами.С++ обычное имя Помощь студентам 0 22.05.2014 11:15
нужна помощь в работе с файлами gemoglobin Паскаль, Turbo Pascal, PascalABC.NET 2 08.07.2009 17:21
Работа с файлами и записями. Помощь с итоговой Refenement Помощь студентам 13 19.03.2009 08:42
Работа с файлами, нужна помощь Johnson Общие вопросы Delphi 5 19.07.2008 23:15
Работа с файлами. Нужна помощь. Corwin88 Помощь студентам 9 14.05.2008 22:37