Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

чтение файла [D6, Win95/98, Win2k, WinXP]


chips ©   (2002-06-19 15:42:00) 

Уважаемые мастера ,как можно из произвольного файла ( не обязательно ТХТ), извлечь только текст в переменную типа String ?


Vitalik   (2002-06-19 20:00:00) [1]

Вот вариант, предложеный Дмитрием Барановым может и не подойти. Потому что вполне может случится так, что где-то в файле ещё будет написана такая очень даже не редкая последовательность символов. И тогда программа примет эту последовательность за ссылку-связку.
Есть другой простой выход.
В конце файла просто пиши число, которое определяет длинну строки ссылки-связки. Вот пример:
Тут важно переменную какого типа ты будешь использовать. Потому что integer занимает 4 байта, word - 2 байта и т.д. Ты можешь про размеры целых типов посмотреть в справке.

var
f: TFileStream;
l: integer; //Длинна строки ссылки
s: string;//ссылка
begin
f:=TFileStream.Create("FileName", fmOpenRead);//открываем файл
f.Position:=f.Size-SizeOf(l);//устанавливаем позицию в файле для считывания l
f.Read(l, SizeOf(l));//считываем l
s:="";
SetLength(s, l);//Устанавливаем длинну строки
f.Position:=f.Size-SizeOf(l)-l;//устанавливаем позицию для считывания строки
f.Read(PChar(s)^, l);//считываем строку
f.free;//закрываем файл
end;

Ещё чё не ясно, <a href="vitalik@online.sinor.ru">пиши мне</a>.


GrayFox   (2002-06-19 19:16:00) [2]

для файла понятия только текст нет, если считываешь текст то значит у тебя считываются блоки размером с байт, и выдается соотвествующий символ,
можешь сделать так, поставь строку типа <link>d:/media/clip.avi</link>, потом открывай файл как текстовый и ищи в нем слово <link>, найдя считывай в переменную все что стоит после него и до </link>, т.е. текст между тегами.
а вообще на будущее изучай хml


Игорь Шевченко   (2002-06-19 16:58:00) [3]


> (практически все компиляторы включают в себя парсер, ядром
> которого служит механизм регулярных выражений).


Это что-то новое в теории компиляторов


Дмитрий Баранов   (2002-06-19 16:49:00) [4]

Проповедую регулярные выражения и Perl (соотв. пакеты есть и для Delphi)
В этом случае задача решается в две строки примернотак
$FILE =~m|(\w:(?:\.*?)+)\.\w\w\w?)|;
$path = $1;
# извлекли путь по маске:
буква, двоеточие, затем одна или более конструкций (\directoryorfile)затем точка и два или три символа для расширения.

Не стоит пугаться изобилия значков, тут все просто :), а инструмент - мощнейший (практически все компиляторы включают в себя парсер, ядром которого служит механизм регулярных выражений).


S@shka   (2002-06-19 16:39:00) [5]

Вобщем-то какая-то горбуха. (судя по вопросу)
Если ты знаешь позицию в файле где у тебя начинается ссылка то...
var
F: File of Char;
c:Char;
I:Byte;
S:String;
begin
assignfile (F,...);
reset (F);
seek (F,nPos);
S:="";
for i:=1 to 12 do
begin
read (F,c);
S:=S+c;
end;
:) Одно маленькое НО!!! ты должен знать начало и размер ссылки - облом конечно - но энто всего лишь вариант:)


Новенький в Делфи   (2002-06-19 16:28:00) [6]

как мне кажется нужно знать позицию начала текста, и количство нужных символов.
затем открываешь FileOpen();
FileSeek() устанавливаешь позицию
FileRead() читаешь нужное количество символов.

Сам не пробовал если честно :)


chips   (2002-06-19 15:55:00) [7]

у меня в файле (в его конце) есть ссылка- вида " d:\media\clip.dps" ,связывающая основной файл с дочерним , я ее могу прочитать в "блокноте", а вокруг не нужный мусор( не символьный)
мне ее и нужно достать.


Kaban   (2002-06-19 15:43:00) [8]

А что значит только текст?


Наверх

Титульная страница Поиск, карта сайта Написать письмо