![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение данных из текстового файла [D5, Win95/98, Win2k, WinXP]
Andrew Volkov © (2002-09-07 22:32:00)Не подсажете каким образом можно производить чтение из текстового файла имеющего к примеру след. структуру
данное 1, данное 2, данное3,
д4, д5, д6, д7, д8,
д9,
д10, д11,
д12, д13, д14
д15.
Реально нужно просто вытащить эти данные, но как двигаться по файлу и читать данные я из хелпа как-то не сообразил.
Спасибо
Стрелочник (2002-09-11 03:37:00) [1]2 Пуаро
Ты действительно не то сказал, не так понял и не то сдавал 3 раза.
Шутка.
Твоя главная ошибка состоит в том, что ты не жаворонок. Посему тебе лучше не пытаться выступать на форуме рано утром. Имхо, результатом, в лучшем случае, являются сплошные "очепятки".
В более позднее время суток ты гораздо "длиннее" (как удав в попугаях).
Andrew Volkov (2002-09-10 21:22:00) [2]Большое спасибо. Яснее не бывает. :-)))
Poirot (2002-09-10 06:49:00) [3]
> Юрий Зотов © (
Зашибись!!! Я что-то не то сказал???
Типа читаем мы непострочно, а тады как!!!
Паскаль я 5 лет учу и 3 курсовика сдал....
Юрий Зотов (2002-09-10 01:30:00) [4]Да, насчет форматированного ввода - это я погорячился. Вывод такой есть, а вот ввода - нет. Сам уже Паскаль забывать начал, тоже подучить нужно.
:о)
Пришлось делать с короткими строками и слегка подправить файл данных. Вот что получилось.
Данные:
12 34 45
245 Russia Yes 0 0 0
412 0.000012
Yes 1 0
Программа:
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
D1, D2, D3, D4, D7, D8, D9, D10, D13, D14: integer;
D5, D6, D12: string[7]; // Поленился делать разные строки.
D11: double;
procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
begin
AssignFile(F, "Example.txt");
Reset(F);
ReadLn(F, D1, D2, D3);
ReadLn(F, D4, D5, D6, D7, D8, D9);
ReadLn(F);
ReadLn(F, D10, D11);
ReadLn(F);
Read(F, D12, D13, D14);
CloseFile(F);
D5 := Trim(D5);
D6 := Trim(D6);
D12 := Trim(D12);
Memo1.Lines.Add(Format("%d %d %d", [D1, D2, D3]));
Memo1.Lines.Add(Format("%d %s %s %d %d %d", [D4, D5, D6, D7, D8, D9]));
Memo1.Lines.Add("");
Memo1.Lines.Add(Format("%d %8.6f", [D10, D11]));
Memo1.Lines.Add("");
Memo1.Lines.Add(Format("%s %d %d", [D12, D13, D14]));
end;
В общем - никаких откровений, конечно, но файл читает без проблем. Лишь бы был точно известен его формат.
Andrew Volkov (2002-09-10 00:27:00) [5]Спасибо что мучаетесь со мной
Юрий Зотов (2002-09-10 00:25:00) [6]> Andrew Volkov (10.09.02 00:10)
Можно и так, но не обязательно. Есть другой способ - форматированный ввод.
Сел писать пример чтения Вашего файла, чуть позже выдам код.
Andrew Volkov (2002-09-10 00:15:00) [7]пример файла
12, 34, 45,
245,Russia, Yes, 0, 0, 0
412, 0.000012,
Yes, 1, 0
Andrew Volkov (2002-09-10 00:10:00) [8]>Юрий Зотов
Это получается я только могу жестко задать
д1: string[3];
д2: string[5];
И тогда он автоматом пойдет в след. переменную?
Если так то этот момент я понял.
Юрий Зотов (2002-09-10 00:05:00) [9]> Если можно объясните этот момент.
Можно, конечно, но лучше на примере, а то очень много писать придется. Приведите текст конкретного файла данных.
> а можно как-нибудь читать с какой-то позиции в файле
См. Seek в справке Delphi или SetFilePointer в справке API.
Andrew Volkov (2002-09-09 23:55:00) [10]>Юрий Зотов
Спасибо.
Только я не совсем понял строку
> ReadLn(F, д1, д2, д3);
Вы имели в виду что должно быть
> ReadLn(F, D1{д1, д2, д3});
я имею в виду 1 переменная в которую считывается вся строка.
Или там дейтвительно 3 переменных, потому-что я попробовал у меня строка пишется в первую переменную.
Если 1 переменная, то дальше все ясно, а если 3 то тогда не ясно как все попадает во 2 и 3 переменные.
Если можно объясните этот момент.
П.С. И вот такой вопрос еще возник, а можно как-нибудь читать с какой-то позиции в файле, и если да то как?
Aleks1 (2002-09-09 06:10:00) [11]Спасибо Юрий, что помимо прочего и ответили за меня на Poirot © (08.09.02 08:53)
Хотя с исходным форматом файла все-таки остались непонятности.
То ли форматирование сообщения испорчено, то ли?
Поскольку действительно грамотный вариант Юрия Зотова
> ReadLn(F, д1, д2, д3);
> ReadLn(F, д4, д5, д6, д7, д8);
ну никак не подойдет, если у автора в тексте вопроса возник лишний перевод строки вместе с возвратом каретки, допустим из-за несовпадение форматов браузера и форума.
Именно это я и имел в виду, поскольку видимые мне строки, частью заканчиваются запятыми, частью ничем, частью точкой.
Юрий Зотов (2002-09-08 22:00:00) [12]> , но как двигаться по файлу и читать данные
А что, разве Read и ReadLn уже отменили?
var
F: TextFile;
д1: ...;
д2: ...;
...
д15: ...;
begin
AssignFile(FileName, F);
Reset(F);
ReadLn(F, д1, д2, д3);
ReadLn(F, д4, д5, д6, д7, д8);
ReadLn(F, д9);
ReadLn(F, д10, д11);
ReadLn(F); // это пропуск пустой строки
ReadLn(F, д12, д13, д14);
Read(F, д15);
Close(F);
end;
> Еслии идти стандартно, то надо вам читать построчьно, а потом
> разбивать эту строку по запятым....
> Можно читать посоимвольно, то придётся отслеживать EOLN и EOF
Боже, какой кошмар!
> Ну а двльше надо просто читать строку, присваивать её
> CommaText и потом анализировать StringList!!!
Стрельба из пушки по воробьям.
Есть такой язык - Паскаль называется. Советую изучить, очень пригодится.
Andrew Volkov (2002-09-08 15:23:00) [13]Можно на мыло прислать, чтобы сразу разобраться. Если не трудно.
Poirot (2002-09-08 12:59:00) [14]Вот что предлагает MBo
var T:TStringList;
begin
T:=TStringList.create;
T.CommaText:="dddd, dddd, ddd";
T.Free;
end;
Ну а двльше надо просто читать строку, присваивать её CommaText и потом анализировать StringList!!!
А свой код при большей необходимости напишу на мыло, пиши!!!
MBo (2002-09-08 11:07:00) [15]изучи TStringList, обрати внимание на CommaText
Andrew Volkov (2002-09-08 11:05:00) [16]to Poirot: если можно пример.
Andrew Volkov (2002-09-08 11:04:00) [17]to Aleks: если можно пример.
А пример я вроде понятно написал.
Есть файл где записано определенное колличество данных.
Они расположены грубо говоря так как я написал
д1, д2, д3 (к примеру эти данные 16.45, 56, Moscow)
Разделены данные к примеру запятыми.
Следующая строка не имеет такую же структуру как первая.
д4, д5, д6, д7, д8, (к примеру 0.11111, 1, 1, Russia, 500)
К тому же могут быть "нулевые" строки.
д10, д11,
"нулевая" строка
д12, д13, д14
Poirot (2002-09-08 08:53:00) [18]
> Aleks1
Прикольно!!! Вопросов больше чем ответов!!
> Может лучше привести пример файла, а тогда будут и ответы.
А выше это не примет, так Бред!!! ДА????
Слухай сюда!!!
Еслии идти стандартно, то надо вам читать построчьно, а потом разбивать эту строку по запятым....
Можно читать посоимвольно, то придётся отслеживать EOLN и EOF...
Надеюсь понятно!!! Если нет говори, пример напишу....
Ага чуть незабыл... С пустыми строками лучше наверное будет посимвольное чтение, т.к. в построчном надо добавить , хоть и не много, но строчку на проверку пустой строчки!!!
Aleks1 (2002-09-08 03:32:00) [19]Что в данном вопросе означают запятые?
Что в данном вопросе означают "переводы строки"?
И какое это все имеет отношение к "текстовому" файлу?
И что такое "структура" текстового файла в вашем понимании?
Может лучше привести пример файла, а тогда будут и ответы.