Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизЧтение файла. Найти похожие ветки
← →
Villain (2004-03-17 02:44) [0]Помогите!!!Есть текстовый файл. Нужно загнать слова из файла в массив. Помогите как. Блин в паскале как знаю, а здесь не работает. Прога читает не по словам а по строчно. Уж извините, что такой пустяковый вопрос.
← →
Defunct © (2004-03-17 02:52) [1]Можно точно также как и в паскале, с учетом что:
Pascal DelphiText 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