Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.032 c
3-1078773828
ceval
2004-03-08 22:23
2004.04.04
как названия поля сделать по середине


1-1079340178
pavlov
2004-03-15 11:42
2004.04.04
работа с файлами из под сервиса


11-1058333717
IronWit
2003-07-16 09:35
2004.04.04
как открыть на редкатирование определенную ячейку в listview


14-1078924395
Petr V. Abramov
2004-03-10 16:13
2004.04.04
За что аборигены съели Кука?


1-1079246174
Sphinx
2004-03-14 09:36
2004.04.04
Popup Menu и его координаты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский