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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 06:41   #1
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию Сохранение массива вещественных чисел в файл

Здраствуйте. Стыдно признаться, но не получается у меня сохранить массив вещественных чисел в файл.
Объявление
Код:
const
   n=6;
   m=3;
var
   f1: TextFile;
   G: array[0..m,0..n] of Real;
   i,j: integer;
далее идет заполнение массива, вывод его на экран (выводится нормально),
затем сохранение в файл
Код:
AssignFile(f1,'output');
Rewrite(f1);
for i:=0 to n-1 do
  begin
    for j:=0 to m-1 do
      write(f1,G[i,j]:10:4);
    writeln(f1);
  end;
В итоге в файл не записываются последние две строки массива.
Если вместо
Код:
write(f1,G[i,j]:10:4);
написать
Код:
 write(f1,G[i,j]:0:4);
то запишутся все элементы, но без отступов, что не есть хорошо.
Как решить эту проблему? Заранее спасибо.
A_r_r_a_y вне форума Ответить с цитированием
Старый 10.06.2010, 07:26   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Как я понял, работаешь с Дельфёй... Пишешь в текстовый файл значения типа REAL....
Код:
write(f1,FloatToStr(G[i,j])+'  ');
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.06.2010, 07:38   #3
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

да, консольное приложение в дельфи,
Код:
write(f1,FloatToStr(G[i,j])+'  ');
ничего не изменилось, также последних строк не хватает, причем, если увеличивать или уменьшать отступ, то кол-во выводимых символов тоже увеличивается и уменьшается.
вот, на всякий случай весь код, может где-нибудь в другом месте налажал
Код:
program array_file;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  n=6;
  m=3;
var
  f,f1: TextFile;
  G: array[0..m,0..n] of Real;
  tmp: string;
  i,j: integer;
begin
  AssignFile(f,'in');//ассоциация файла
  Reset(f);//открытие файла
  {Чтение массива G из файла}
  for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
        Read(f,G[i,j]);
    end;
  CloseFile(f);//Закрываем файл
  {Вывод массива G}
  Writeln('=== source array: ===');
  for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
        Write(G[i,j]:10:4);
      Writeln;
    end;
  AssignFile(f1,'output');
  Rewrite(f1);
  for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
        write(f1,FloatToStr(G[i,j])+'  ');
      writeln(f1);
    end;
  readln;
end.
Вложения
Тип файла: rar in.rar (164 байт, 13 просмотров)

Последний раз редактировалось A_r_r_a_y; 10.06.2010 в 07:40.
A_r_r_a_y вне форума Ответить с цитированием
Старый 10.06.2010, 07:48   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Опять чушь городишь... Открываешь текстовый файл, а заполняешь массив типа REAL....
А вообще лучше с текстом работать через Writeln/Readln, чтобы в строке содержалось одно значение массива... А еще лучше работать не с текстовым файлом, а типизированным f:file of real

Код:
Var
  Line:string;

  for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
        begin
          Read(f,Line]);
          Trim(Line);
          G[i,j]:=StrToFloat(Line)
        end 
    end;
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.06.2010, 08:18   #5
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Опять чушь городишь... Открываешь текстовый файл, а заполняешь массив типа REAL....
А вообще лучше с текстом работать через Writeln/Readln, чтобы в строке содержалось одно значение массива... А еще лучше работать не с текстовым файлом, а типизированным f:file of real

Код:
Var
  Line:string;

  for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
        begin
          Read(f,Line]);
          Trim(Line);
          G[i,j]:=StrToFloat(Line)
        end 
    end;
мне нужно именно с текстовым, заполнение массива из файла работает нормально.
Я что-то совсем не понимаю как может этот код
Код:
for i:=0 to n-1 do
    for j:=0 to m-1 do
      begin
        writeln(f1,FloatToStr(G[j,i]));
        writeln(FloatToStr(G[j,i]));
      end;
на экран выводить все элементы, а в файл не сохраняют два последних
A_r_r_a_y вне форума Ответить с цитированием
Старый 10.06.2010, 09:02   #6
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

В общем не стал я париться, сделал работу с файлами через TStringList
Grag, спасибо за помощь

Последний раз редактировалось A_r_r_a_y; 10.06.2010 в 09:05.
A_r_r_a_y вне форума Ответить с цитированием
Старый 10.06.2010, 09:47   #7
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Так ты сам то посмотри внимательно свой код!!! У тебя массив как объявлен??? Как G[0..m,0..n] of real. А выводишь ты в цикле как???
От i:=0 to N-1 и от j:=0 to M-1... Вот без единицы и теряются данные, да и кроме того нужно переставить местами N и M, а то перепутал столбцы и строки....
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.06.2010, 10:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
От i:=0 to N-1 и от j:=0 to M-1... Вот без единицы и теряются данные, да и кроме того нужно переставить местами N и M, а то перепутал столбцы и строки....
Золотые слова!
+1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2010, 10:18   #9
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

со столбцами и строками налажал, но там где
Код:
От i:=0 to N-1 и от j:=0 to M-1
дело не в этом, я и заполняю точно также, так что в худшем случае у меня по одной лишней строке и столбцу.
И как Вы думаете почему:
Код:
 for i:=0 to n do
    for j:=0 to m do
      begin
        writeln(f1,FloatToStr(G[i,j]));
        writeln(FloatToStr(G[i,j]));
      end;
Вывожу одно и тоже на экран и в файл, на экране все норм, а в файле не хватает элементов.
A_r_r_a_y вне форума Ответить с цитированием
Старый 10.06.2010, 10:22   #10
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ты файл исходных данных как создавал?
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл вещественных чисел. dexter2145 Помощь студентам 7 08.06.2010 22:50
Файл вещественных чисел. toybike Общие вопросы C/C++ 8 10.12.2009 20:02
Файл вещественных чисел bullvinkle Общие вопросы C/C++ 1 18.06.2009 01:31
Удалить столбец двумерного массива вещественных чисел dolbi Помощь студентам 2 29.03.2008 06:30