|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как работать с текстовыми файлами?
Передо мной стоит простая задача:есть входной файл 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
|
||||
|
||||
31 - строка должна быть в кавычках (апострофах, если точнее).
35 - "';' требуется, но 'FOR' найдено". Хотя не вижу причин для этой ошибки... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
||||
|
||||
Цитата:
Код:
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
|
|||
|
|||
С кавычками я пробовал писать. Ошибка теперь еще хуже:
[Error] Unit1.pas(33): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'. Что ему не нравится-то? |
#5
|
||||
|
||||
Исправленный пример
Код:
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 Код:
Совпадений найдено = 3 Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
Попробовал Ваш вариант, работает. Единственное, что мне не понятно - почему моя программа не работает?
|
#7
|
||||
|
||||
В твоём варианте вместо TextFile используется File.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |