Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Чтение файла.   Найти похожие ветки 

 
Villain   (2004-03-17 02:44) [0]

Помогите!!!Есть текстовый файл. Нужно загнать слова из файла в массив. Помогите как. Блин в паскале как знаю, а здесь не работает. Прога читает не по словам а по строчно. Уж извините, что такой пустяковый вопрос.


 
Defunct ©   (2004-03-17 02:52) [1]

Можно точно также как и в паскале, с учетом что:
Pascal       Delphi
Text        TextFile
Assign      AssignFile
Close       CloseFile


Более отличий в работе нет.


 
Villain   (2004-03-17 02:56) [2]

пишу:

t:array[1..n]of string;
f:textfile;
k:integer;{number of words}
assignfile(f,"filename");
reset(f);
readln(f,k);
for i:=1 to k do
read(f,t[i,1]);

не работает


 
Villain   (2004-03-17 02:57) [3]

сорри последняя строка ессно read(f,t[i]);


 
Defunct ©   (2004-03-17 03:10) [4]

Villain   (17.03.04 02:56) [2]
Указали хотя бы какая ошибка возникает...

Вот примерчик загузки всех строк файла unit1.pas в массив строк T:

procedure TForm1.Button1Click(Sender: TObject);
var T:Array of string;
   F:TextFile;
   K:Integer;
Begin
 AssignFile(F,"unit1.pas");
 Reset(f); K:=0;
 While not Eof(F) Do
 Begin
   Inc(K);
   SetLength(T,K);
   ReadLn(F,T[K-1]);
 End;
 CloseFile(F);
end;


procedure TForm1.Button1Click(Sender: TObject);
var T:Array of string;
   F:TextFile;
   K:Integer;
Begin
 AssignFile(F,"unit1.pas");
 Reset(f); K:=0;
 While not Eof(F) Do
 Begin
   Inc(K);
   SetLength(T,K);
   ReadLn(F,T[K-1]);
 End;
 CloseFile(F);
end;


 
Defunct ©   (2004-03-17 03:21) [5]

Прощу прощения за двойную вставку


 
Villain   (2004-03-17 03:50) [6]

Извини, но че то не получается.
Проблема была в считывании именно слов из строки а не построчно.
А в твоем примере я че-то не очень разобрался. Где можно посмореть слова которые он выловил?
Ну да ладно. Не заморачивайся над этим. Пойду ка я лучше спать. Завтра сам разберусь.
А тебе все равно ОГРОМНОЕ спасибо.


 
_sulent ©   (2004-03-17 08:41) [7]

Делай проще, сейчас попробую что-то родить, но рожаю тут, допустим есть у тебя текстовый файл с каким-то набором строк:


cosnt
 filename = "c:\textfile.txt";

var
F: TextFile;
af: array of string;
counter: integer;

procedure readData;
begin
 AssignFile(F, filename;
 {$i-}
 reset(F);
 {$i+}
 if IOResult <> 0 then begin
   raise Exception.Create("Can""t open file ""+filename+""...");
   exit;
 end;
 counter := 0;
 while not eof(F) do begin
   inc(counter);
   setLength(af, counter)
   readln(F, af[counter-1]);
 end;
 CloseFile(F);
 ShowMessage("Загрузка данных в массив закончена!");
{
 Можно сделать например проверочку загрузки данных из файла, раскомменть если захочешь...
 for i := 0 to counter - 1 do
   Memo1.Lines.add(af[i]);

 Вот и все дела...
}
end;


 
pasha_golub ©   (2004-03-17 09:06) [8]

Нужно считывать построчно, а потом разбирать по словам.

AssignFile
Reset
while not eof
ReadLn
pos+copy
CloseFile


 
Anatoly Podgoretsky ©   (2004-03-17 09:09) [9]

Villain   (17.03.04 02:56) [2]
Недостаточной объем информации о файле и словах.
Это у тебя не могло работать и на ТП, если конечно у тебя не все слова в одну строку.
Тебе надо делат как привели в примерах, читать всю строку в перемененную процедурой ReadLn и затем разбивать ее на слова, любым методом.


 
_sulent ©   (2004-03-17 10:08) [10]

допустим у тебя файл состоит так:
Фамилия|Имя|Отчетсво
type
 rec = record
   FirstName, middleName, LastName: string[30];
 end;
var
 ar: array of rec;
 F: TextFile;
...
 readln(F, format("%s|%s|%s", [ar[counter].FirstName, ar[counter].middleName, ar[counter].LastName]));
...
Правда не проверял на достоверность работы, но попробуй так...


 
Noway ©   (2004-03-17 10:33) [11]

Признак конца слова - пробел.
Используй это.
допустим. Считываешь строку посимвольно, параллельно составляя слово, т.е. строку которую потом будешь вставлять в массив. Как только натыкаешься на пробел, заносишь полученную строку в массив, обнуляешь ее и продолжаешь считывать.. и т д пока не дойдешь до конца строки. Потом переходишь на другую строку.


 
Villain   (2004-03-17 11:49) [12]

Ой как тут много всего за ночь то написали!!!
_Sulent твой код уж очень пхож на написанное ранеее. Я правда не очень всматривался, мож там и есть изюминка, но на первый взгляд- 1 в 1. Про разбиение по пробелам я сам думал, но мне почему-то казалось ето как то несерьезным писать. Что понравилось, правда пока не проверял, так это про рекорды.
Всем еще раз спасибо.


 
ЮрийК ©   (2004-03-17 13:39) [13]

Const
DELIMITERS = [Chr(0)..Chr(32), "&", "(", ")", "^", "|", ... ];
...

... //Открываем файл
s := "";
while not EOF(F) do begin
while true do begin
 ... //Читаем символ из файла
 if (symbol in DELIMITERS) then break;
 s := s + symbol
 else break;
end;
if (s <> "") then begin
 //что-то делаем
 s := "";
end;
end;
... //Закрываем файл


 
ЮрийК ©   (2004-03-17 13:40) [14]

Const
DELIMITERS = [Chr(0)..Chr(32), "&", "(", ")", "^", "|", ... ];
...

... //Открываем файл
s := "";
while not EOF(F) do begin
while true do begin
 ... //Читаем символ из файла
 if (symbol in DELIMITERS) then break;
 s := s + symbol;
 else break;
end;
if (s <> "") then begin
 //что-то делаем
 s := "";
end;
end;
... //Закрываем файл


 
ЮрийК ©   (2004-03-17 13:40) [15]

Const
DELIMITERS = [Chr(0)..Chr(32), "&", "(", ")", "^", "|", ... ];
...

... //Открываем файл
s := "";
while not EOF(F) do begin
while true do begin
 ... //Читаем символ из файла
 if (symbol in DELIMITERS) then break;
 s := s + symbol; end;
if (s <> "") then begin
 //что-то делаем
 s := "";
end;
end;
... //Закрываем файл


 
Fay ©   (2004-03-17 14:10) [16]

Изучаем Турбо Паскаль
57 руб



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
6-1074880167
kor@l
2004-01-23 20:49
2004.04.04
TwebBrowser


14-1078569331
Piter
2004-03-06 13:35
2004.04.04
Хостинг


14-1078637875
Rouse_
2004-03-07 08:37
2004.04.04
C Днем Рождения 7 Марта


3-1078559198
STAR-BOY-F
2004-03-06 10:46
2004.04.04
MySQL и DELPHI 3


6-1075381599
Denis_
2004-01-29 16:06
2004.04.04
отруб инета