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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 16:53   #1
einstein22
 
Аватар для einstein22
 
Регистрация: 24.04.2012
Сообщений: 8
По умолчанию Небольшая проблема с файлом

Здравствуйте.Тренируюсь писать самые простые программы на паскале. Но тут у меня не компилируется файл. В общем то, я понимаю в чем проблема, там в файл массив записать нельзя, но как ее решить не знаю. Вроде надо файл компонентным сделать, а что дальше..?
Код:
program clients_prog;
uses crt;
const n=3;
type TClients = record
        Tname : string[25];
        Tage : integer;
end;
var
  clients : array[1..n] of TClients;
  f_in : text;
  path_to_file : string[255];
  file_exists : boolean;
  i : integer;
  key : char;
begin
  file_exists := false;
  while file_exists = false do begin
   {$I-}
   writeln('Enter path to file');
   readln(path_to_file);
   Assign(f_in, path_to_file); Reset(f_in);
   if IOResult <> 0 then begin
     writeln('No such file or directory exists: ' , path_to_file);
     continue;
   end
   else
     file_exists := true;
   {$I+}
   end;
   writeln('Successfully connected to file.Please add 3 new clients.');
   for i := 1 to n do readln(clients[i].Tname , clients[i].Tage);
   writeln('If you want to add your components to file please press Y. Otherwise please press N');
   key := readkey;
   if key <> 'Y' then exit;
   write(f_in, clients);

  end.
einstein22 вне форума Ответить с цитированием
Старый 23.05.2012, 16:58   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
f_in : file of TClients;

for i := 1 to n do
   write(f_in, clients[i]);
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 23.05.2012, 22:52   #3
einstein22
 
Аватар для einstein22
 
Регистрация: 24.04.2012
Сообщений: 8
По умолчанию

Спасибо, работает.
einstein22 вне форума Ответить с цитированием
Старый 23.05.2012, 23:28   #4
einstein22
 
Аватар для einstein22
 
Регистрация: 24.04.2012
Сообщений: 8
По умолчанию

И можете вы пожалуйста сразу подсказать, как вывести обратно информацию из этого файла?
einstein22 вне форума Ответить с цитированием
Старый 24.05.2012, 01:27   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

в смысле прочитать данные из файла что вы создали обратно в массив?

если файл не типизированый, то читать по строчно
и смотря как данные в файле располагаются, если через пробел, то что до пробела заносить в clients[i].Tname, а все что после в client[i].Tage. А если все с новой строки то по очереди читать то name, то age

например так как-то
Код:
const
  n = 3;

type
  TClients = record
    Tname: string[25];
    Tage: integer;
  end;

var
  clients: array[1..n] of TClients;
  clients_read: array[1..n] of TClients;
  f_in: text;
  path_to_file: string[255];
  i: integer;
  temp: string;
  err: integer;

begin
  path_to_file := 'D:\in.txt';
  for i := 1 to n do readln(clients[i].Tname, clients[i].Tage);
    {запись}
  assign(f_in, path_to_file);
  rewrite(f_in);
  for i := 1 to n do writeln(f_in, clients[i].Tname, ' ', clients[i].Tage);  
  close(f_in);
    {чтение}
  assign(f_in, path_to_file);
  reset(f_in);
  for i := 1 to n do 
  begin
    readln(f_in, temp);
    trim(temp);
    clients_read[i].Tname := copy(temp, 1,  pos(' ', temp) - 1);
    val(copy(temp, pos(' ', temp), length(temp) - pos(' ', temp) + 1 ), clients_read[i].Tage, err);
  end;
  close(f_in); 
  writeln('+--------------+---------+');
  writeln('|    Name      |   Age   |');
  writeln('+--------------+---------+');
  for i := 1 to n do writeln('|', clients_read[i].Tname:14, '|', clients_read[i].Tage:9, '|');
  writeln('+--------------+---------+');  
  close(f_in);
end.
а если типизированный, то все проще... как записывали, так и читаем...
Код:
for i := 1 to n do
   read(f_in, clients[i]);

Последний раз редактировалось unbanned; 24.05.2012 в 02:29.
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
небольшая проблема kojoj3ok Microsoft Office Excel 2 01.03.2011 09:11
Небольшая проблема с запросом к БД mrgrudge PHP 3 15.09.2010 19:05
Небольшая проблема.Детранслитератор Ivanich Помощь студентам 6 17.05.2009 19:59
Работаю с текстовым файлом есть небольшая проблема Parcenson Общие вопросы Delphi 2 13.08.2008 06:46