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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2011, 10:35   #1
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
Вопрос Некорректная работа с файлами

Создал процедуру для чтения из одного файла и записи в другой файл типа integer. Но напоролся на странную вещь - данные считанные из одного файла программа вывела в другой файл нормально, а простую переменную типа integer выводит как кракозябру. Как это можно исправить?

Код:
var 	f: file of integer;  {ôàéëîâàÿ ïåðåìåííàÿ}
     	g: file of integer;  {ôàéëîâàÿ ïåðåìåííàÿ}
    	x,k,n,i: integer;
           a: array [0..10000] of integer;

Begin
  a[0]:=0;
  n:=1;
	assignfile(f,'f.txt');
	assignfile(g,'g.txt');
  {$I-}
	reset(f); 
  rewrite(g); 
	{$I+}
	if IORESULT=0 then 
  begin
	    while not(EOF(f)) do 
      begin       
 		    read(f,x);
        if(x>=0) then inc(a[0]);
 		    a[n]:=x;
        n:=n+1;
	    end;

	    for i:=0 to n-1 do
      begin
        write(g,a[i]);
      end;
      closefile(g);
      closefile(f);
 end;

Последний раз редактировалось Gapro; 23.03.2011 в 13:04.
Gapro вне форума Ответить с цитированием
Старый 23.03.2011, 10:54   #2
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

ИМХО, а почему Integer? а не string?
Lifefine вне форума Ответить с цитированием
Старый 23.03.2011, 11:10   #3
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

В переменную типа Integer не может содержать "кракозябра", поскольку какие бы ты 4 байта не записал в эту переменную, они будут интерпритированны как какое-то значение.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 23.03.2011, 12:01   #4
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

У меня write выводит ascii символ, а не переменную, а почему и как это исправить понять не могу.

Цитата:
В переменную типа Integer не может содержать "кракозябра", поскольку какие бы ты 4 байта не записал в эту переменную, они будут интерпритированны как какое-то значение.
Символ тоже какое то значение
Gapro вне форума Ответить с цитированием
Старый 23.03.2011, 12:24   #5
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Ну для начала поставьте бряк на начало записи и пошагово отслеживайте что у Вас читает из файла, и что пишет в файл...
ИМХО, дело в неправильном чтении файла.
Так же можно посмотреть как устроено чтение и запись в TIniFile.

а ещё... стоило бы массив сделать динамическим.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 23.03.2011, 12:35   #6
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Я отслеживал, считывает огромное число, но при записи в файл оно нормально. А как тогда правильно читать из file of integer? Такое ощущение что в file of integer совсем не integer.
Gapro вне форума Ответить с цитированием
Старый 23.03.2011, 12:51   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

может файловым потом лучше будет считывать?
А вообще, используй Hex-редактор и дебагер, и отлаживай свою программу. При записи очень больших и сложных алгоритмов без него никак.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 23.03.2011, 13:04   #8
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Цитата:
А вообще, используй Hex-редактор и дебагер, и отлаживай свою программу. При записи очень больших и сложных алгоритмов без него никак.
Алгоритм тут простейший, да и локальная задача простейшая считать содержимое f и записать в g количество положительных элементов, а затем все содержимое f
Gapro вне форума Ответить с цитированием
Старый 23.03.2011, 13:08   #9
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Смотри, как устроены TIniFile и читай строку 4 байта, затем приводи типы, например
PDouble(@str[1])^

А вобще... в каком виде должны храниться числа в файле? В виде читаемой строки, или в виде 4 байт?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 23.03.2011, 17:14   #10
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Числа хранятся как обычный текстовый файл: "1 2 3 4 5 " к примеру.

Такое ощущение, что Это из-за того, что я в 7-ке пишу на Delphi 7. Потому что даже Memo.Lines.LoadFromFile мне чушь выдает
Gapro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mkfifo, некорректная работа (Линукс) IceBreaker Помощь студентам 4 21.03.2012 13:34
Некорректная работа меню (jquery) 4e4en JavaScript, Ajax 4 20.10.2010 08:49
Некорректная работа Ucoz.ru docbrain WordPress и другие CMS 7 31.03.2010 11:26
Некорректная работа функции в потоке. TwiX Общие вопросы Delphi 3 28.02.2010 12:33
Некорректная работа потока 3D Hunter Общие вопросы Delphi 7 09.03.2009 10:51