4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
1

Текстовый файл(записи)

22.05.2013, 22:36. Показов 624. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени. Помогите разобраться. Нужно ввести в текстовый файл наборы код магазина - ФИО директора
если файл типизированный, то все выходит без проблем. Вот:
Pascal
1
2
3
4
5
type 
      spr=record
      kmag:integer;
      FIO:string[18];
     end;
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
procedure sprav_vvod;
label l1;
var f:file of spr;
    error,i:integer;
    a:spr;
    name:string;
begin
 clrscr;
   textattr:=white;
  gotoxy (1,1);
 writeln ('Ââåäèòå èìÿ ñïðàâî÷íîãî ôàéëà');
 readln (name);
 assign (f,name);
 rewrite (f);
 writeln ('----------------------------------¬');
 writeln ('¦ êîä ìàãàçèíà ¦ Ô.È.Î. äèðåêòîðà ¦');
 writeln ('L----------------------------------');
  i:=-1;
  l1:
  i:=i+1;
   repeat
      textattr:=white;
     gotoxy (1,6+i);
    write ('¦');
     gotoxy (3,6+i);
    {$i-}
     readln (a.kmag);
     error:=IOResult;
    {$i+}
    if (a.kmag<1) or (a.kmag>99) or (error<>0) then
     begin
        textattr:=lightred;
       gotoxy (10,23);
      write ('Íåâåðíî çàäàí êîä ìàãàçèíà');
      delay (1000);
       gotoxy (10,23);
       clreol;
     end;
   until (a.kmag>=1) and (a.kmag<=99) and (error=0);
 
   repeat
      textattr:=white;
     gotoxy (16,6+i);
    write ('¦');
     gotoxy (18,6+i);
    readln (a.FIO);
    if (length(a.FIO)<3) or (length(a.FIO)>18) then
     begin
        textattr:=lightred;
       gotoxy (10,23);
      write ('Íåâåðíî çàäàíû Ô.È.Î. äèðåêòîðà');
      delay (1000);
       gotoxy (10,23);
       clreol;
     end;
   until (length(a.FIO)>=3) and (length(a.FIO)<=18);
    gotoxy (35,6+i);
   writeln ('¦');
   write (f,a);
  repeat
    gotoxy (1,7+i);
   writeln ('L----------------------------------');
    gotoxy (10,8+i);
   writeln ('Íàæìèòå:');
    gotoxy (12,9+i);
   writeln ('1, ÷òîáû Ïðîäîëæèòü çàïîëíåíèå');
    gotoxy (12,10+i);
   writeln ('2, ÷òîáû Çàêîí÷èòü çàïîëíåíèå');
   ch:=readkey;
     gotoxy (1,7+i);
    clreol;
     gotoxy (10,8+i);
    clreol;
     gotoxy (12,9+i);
    clreol;
     gotoxy (12,10+i);
    clreol;
   if ch='1' then goto l1;
  until ch='2';
 close (f);
end;
и считывание такого файла проходит успешно
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure sprav_tabl;
var f:file of spr;
    a:spr;
    name:string;
begin
 clrscr;
   textattr:=white;
  gotoxy (1,1);
 writeln ('Ââåäèòå èìÿ ôàéëà');
 readln (name);
 assign (f,name);
 {$i-}
  reset (f);
 {$i+}
 if IOResult=0 then
 begin
  writeln ('----------------------------------¬');
  writeln ('¦ êîä ìàãàçèíà ¦ Ô.È.Î. äèðåêòîðà ¦');
  writeln ('L----------------------------------');
  while not eof(f) do
  begin
   read (f,a);
   writeln ('¦',a.kmag:14,'¦',a.FIO:18,'¦');
  end;
  writeln ('L----------------------------------');
  close (f);
 end
 else
  write ('Ôàéëà ñ òàêèì èìåíåì íåò');
 ch:=readkey;
end;
а как осуществить работу программы, если будет использоваться текстовый файл?
Пытаюсь сделать так: считываю с клавы код магазина (также a.mag), потом ФИО (a.FIO), потом записываю в первую строку запись a, затем то же самое для следующей строчки.
Нужно ли тут после каждого ввода кода магазина ставить пробел (или какой другой символ), или сама структура записи подразумевает набор компонент, отделенные как-то?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2013, 22:36
Ответы с готовыми решениями:

Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл
Составить программу с подпрограммами для выполнения следующего алгоритма (предусмотреть процедуры...

Текстовый файл(записи)
Помогите в открытием и редактированием файла. При открытии происходит зацикливание, а на...

Прочитать все записи из файла и вывести их на экран и в текстовый файл
найти max sin, min cos, 2ой минимум и максимум и вывести их на экран

Написать программу записи в текстовый файл любого количества строк введенных с клавиатуры.
Написать программу записи в текстовый файл любого количества строк введенных с клавиатуры. Заранее...

11
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.05.2013, 07:27 2
При записи в текстовый файл обязательно между полями записи нужен какой-либо разделитель, например пробел.
1
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
23.05.2013, 09:17  [ТС] 3
А как будут вводится реквизиты? как компоненты записи, или как просто переменные? просто в типизированном файле после ввода всех компонент записи только идет запись в файл write (f,a), а в текстовом он пишет в этом месте ошибку
0
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.05.2013, 09:20 4
Писать в текстовый файл так
Pascal
1
writeln(f,spr. kmag,' ',spr.FIO);
1
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
23.05.2013, 09:30  [ТС] 5
а в процедуре чтения из файла и записи данных на экран нужно будет делать условие на проверку пробела? если так, то, я как понимаю, записи здесь не играют никакой роли.

Добавлено через 3 минуты
а нет, в чтении с файла все получилось
Pascal
1
2
3
4
5
6
7
while not eof(f) do
  begin
   read (f,a.kmag);
   write ('¦',a.kmag:14,'¦');
   read (f,a.FIO);
   writeln (a.FIO:18,'¦');
  end;
0
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.05.2013, 09:31 6
Чаще всего делается так. Данные изначально содержатся в текстовом файле. Они читаются из него в записи и записываются в типизированный файл для обработки. Хранить записи в текстовом файле конечно нет никакого смысла.
1
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
23.05.2013, 09:31  [ТС] 7
только почему то пишется еще дополнительная строчка, где код магазина 0, а поле ФИО - пустое
0
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.05.2013, 09:33 8
Значит в конце файла есть лишняя пустая строка, убери.
1
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
23.05.2013, 09:35  [ТС] 9
она появляется сама после окончания записи в файл
Pascal
1
writeln (f,a.kmag,' ',a.FIO);
0
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.05.2013, 09:39 10
Задачу нужно решать конкретно, а не так что вздумается. Можно избежать записи пустой строки, можно избежать ее вывода при чтении.
0
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
23.05.2013, 09:39  [ТС] 11
все, поставил write заместо writeln, а пустой writeln поставил в конце цикла repeat
спс большое за помощь!! разобрался
0
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
26.05.2013, 16:25  [ТС] 12
Здравствуйте.
Еще такой вопрос. Как сделать копию текстового файла с другим именем? есть ли такая процедура?

Добавлено через 9 минут
все, вопрос решен...
0
26.05.2013, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 16:25
Помогаю со студенческими работами здесь

Пусть имеется текстовый файл, который содержит несколько целых чисел. Открыть этот текстовый файл и каждое из чисел вознести в квадрат.
Пусть имеется текстовый файл, который содержит несколько целых чисел. Открыть этот текстовый файл и...

Текстовый файл - Структура (записи)
Проблема в том, что я незнаю как правильно ввести в текстовик информацию. помогите пожалуйста ...

Текстовый файл содержит несколько целых чисел, выбросить из записи числа цифры 0 и 2
Помогите сделать задание! первая часть уже сделана, исходя из нее, надо сделать дальше! ЗАДАНИЕ...

Текстовый файл содержит список фамилий и должность сотрудников. Сформировать текстовый файл, содержащий фамил
Текстовый файл содержит список фамилий и должность сотрудников. Сформировать текстовый файл,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru