Форум: "Основная";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Внизчтение файла Найти похожие ветки
← →
chips (2002-06-19 15:42) [0]Уважаемые мастера ,как можно из произвольного файла ( не обязательно ТХТ), извлечь только текст в переменную типа String ?
← →
Kaban (2002-06-19 15:43) [1]А что значит только текст?
← →
chips (2002-06-19 15:55) [2]у меня в файле (в его конце) есть ссылка- вида " d:\media\clip.dps" ,связывающая основной файл с дочерним , я ее могу прочитать в "блокноте", а вокруг не нужный мусор( не символьный)
мне ее и нужно достать.
← →
Новенький в Делфи (2002-06-19 16:28) [3]как мне кажется нужно знать позицию начала текста, и количство нужных символов.
затем открываешь FileOpen();
FileSeek() устанавливаешь позицию
FileRead() читаешь нужное количество символов.
Сам не пробовал если честно :)
← →
S@shka (2002-06-19 16:39) [4]Вобщем-то какая-то горбуха. (судя по вопросу)
Если ты знаешь позицию в файле где у тебя начинается ссылка то...
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:49) [5]Проповедую регулярные выражения и Perl (соотв. пакеты есть и для Delphi)
В этом случае задача решается в две строки примерно так
$FILE =~m|(\w:(?:\.*?)+)\.\w\w\w?)|;
$path = $1;
# извлекли путь по маске:
буква, двоеточие, затем одна или более конструкций (\directoryorfile)затем точка и два или три символа для расширения.
Не стоит пугаться изобилия значков, тут все просто :), а инструмент - мощнейший (практически все компиляторы включают в себя парсер, ядром которого служит механизм регулярных выражений).
← →
Игорь Шевченко (2002-06-19 16:58) [6]
> (практически все компиляторы включают в себя парсер, ядром
> которого служит механизм регулярных выражений).
Это что-то новое в теории компиляторов
← →
GrayFox (2002-06-19 19:16) [7]для файла понятия только текст нет, если считываешь текст то значит у тебя считываются блоки размером с байт, и выдается соотвествующий символ,
можешь сделать так, поставь строку типа <link>d:/media/clip.avi</link>, потом открывай файл как текстовый и ищи в нем слово <link>, найдя считывай в переменную все что стоит после него и до </link>, т.е. текст между тегами.
а вообще на будущее изучай хml
← →
Vitalik (2002-06-19 20:00) [8]Вот вариант, предложеный Дмитрием Барановым может и не подойти. Потому что вполне может случится так, что где-то в файле ещё будет написана такая очень даже не редкая последовательность символов. И тогда программа примет эту последовательность за ссылку-связку.
Есть другой простой выход.
В конце файла просто пиши число, которое определяет длинну строки ссылки-связки. Вот пример:
Тут важно переменную какого типа ты будешь использовать. Потому что 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>.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c