Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2013, 18:22
Diplomate Diplomate вне форума
Прохожий
 
Регистрация: 10.11.2012
Сообщения: 15
Репутация: 10
По умолчанию Как работать с текстовыми файлами?

Передо мной стоит простая задача:есть входной файл input. В первой строке написано число элементов массива, во второй - сами элементы массива. В третьей строке записано любое число. Я должен посчитать, сколько раз в массиве встречается число из третьей строки. Сама задача невероятно простая, но я не понимаю, как работать с файлами! Вот мой код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var f:file;
n,x,i,p,r:integer;
a:array of integer;
begin
r:=0;
assignfile(f,input.txt); //это строка 31
reset(f);
readln(f,n);
setlength(a,n);
for i:=0 to n-1 do //это строка 35
 read(f,a[i]);
readln(f,p);
read(f,x);
closefile(f);
for i:=0 to n do
 if  a[i]=x then inc(r);
assignfile(f,output.txt);
rewrite(f);
write(f,r);
closefile(f);
end; 
Понимаю, что эта программа вообще через задницу написана...но в обычном Паскале аналогичная работает. Вот, какие ошибки выводит.
[Error] Unit1.pas(31): Record, object or class type required
[Error] Unit1.pas(35): ';' expected but 'FOR' found
В общем, объясните дураку, почему это не работает?
Ответить с цитированием
  #2  
Старый 23.03.2013, 19:21
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

31 - строка должна быть в кавычках (апострофах, если точнее).
35 - "';' требуется, но 'FOR' найдено". Хотя не вижу причин для этой ошибки...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 23.03.2013, 20:58
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от PhoeniX
31 - строка должна быть в кавычках (апострофах, если точнее)...
42я строка тоже.
Код:
assignfile(f, 'output.txt'); 

З.Ы. Как-то забылось, что это текстовый файл
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile;
sl: TStringList;
i,cnt: integer;
str,st: string;
begin
if FileExists('input.txt') then
begin   
AssignFile(f,'input.txt');
   Reset(f);
    Readln(f, st);
    Readln(f,str);
    Readln(f, st);
   CloseFile(f);

   sl:= TStringList.Create;
   sl.Text:= StringReplace(str,' ',#13#10,[rfReplaceAll,rfIgnoreCase]);
   cnt:= 0;
  for i:=0 to sl.Count-1 do if sl[i] = st then Inc(cnt);
   sl.Free;
  if FileExists('output.txt') then 
begin
AssignFile(f,'output.txt');
    ReWrite(f);
    Write(f,cnt);
   CloseFile(f);
end;
end;
end;
работает и так

Последний раз редактировалось Alegun, 23.03.2013 в 22:56.
Ответить с цитированием
  #4  
Старый 24.03.2013, 01:24
Diplomate Diplomate вне форума
Прохожий
 
Регистрация: 10.11.2012
Сообщения: 15
Репутация: 10
По умолчанию

С кавычками я пробовал писать. Ошибка теперь еще хуже:
[Error] Unit1.pas(33): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'. Что ему не нравится-то?
Ответить с цитированием
  #5  
Старый 24.03.2013, 02:19
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Исправленный пример
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  f      : TextFile;
  Count,
  Search,
  I, J   : Integer;
  buf    : array of Integer;
begin
  AssignFile(f, 'input.txt');
  Reset(f);
  ReadLn(f, Count);
  SetLength(buf, Count);

  for I := 0 to Count - 1 do
    Read(f, buf[i]);

  ReadLn(f);
  ReadLn(f, Search);
  CloseFile(f);

  J := 0;
  for I := 0 to Count - 1 do
    if buf[i] = Search then
      inc(J);

  AssignFile(f, 'output.txt');
  Rewrite(f);
  WriteLn(f, 'Совпадений найдено = ', J);
  CloseFile(f);
end;

input.txt
Код:
16
25 64 78 82 62 58 25 21 22 33 23 53 22 65 26 22
22
output.txt
Код:
Совпадений найдено = 3
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 24.03.2013, 18:26
Diplomate Diplomate вне форума
Прохожий
 
Регистрация: 10.11.2012
Сообщения: 15
Репутация: 10
По умолчанию

Попробовал Ваш вариант, работает. Единственное, что мне не понятно - почему моя программа не работает?
Ответить с цитированием
  #7  
Старый 24.03.2013, 22:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В твоём варианте вместо TextFile используется File.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter