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

Вниз

Прочитать из файла!   Найти похожие ветки 

 
The_Vizit0r   (2002-12-09 17:54) [0]

Народ помогите!
У меня есть большой файл! Нужно прочитать из него только последние три строчки! Можно ли сделать так, чтобы прочитать только 3 последнии строчки не читая всех предидущих(а то долго)! :(
Если можно, то приведите пример кода! Заранее благодарен!


 
Kotka   (2002-12-09 17:58) [1]

>Можно ли сделать так, чтобы прочитать только 3 последнии строчки не читая всех предидущих

Вряд ли. Ты же не знаешь их точную длину! Или знаешь?


 
The_Vizit0r   (2002-12-09 18:01) [2]

Ты имеешь ввиду строк? То знаю, только в сиволах


 
MBo   (2002-12-09 18:14) [3]

считай конец файла (например, TfileStram), ищи символы перевода строк.


 
han_malign   (2002-12-09 18:27) [4]

если размер строк известен то через API примерно так(hFile открывается в CreateFile):
var _total: int64;
begin
with LARGE_INTEGER(_total) do begin
LowPart:=GetFileSize(hFile,@HighPart);
if(LowPart=$FFFFFFFF)then begin
Result:=GetLastError;
if(Result<>NO_ERROR)then exit;
end;
end;
dec(_total,(cDefaultStrLength+2)*3);
with LARGE_INTEGER(_total) do
LowPart:=SetFilePointer(hFile,LowPart,@HighPart,FILE_BEGIN);
if(LARGE_INTEGER(aOffs).LowPart<>$FFFFFFFF)
then begin
Result:=NO_ERROR;
end else Result:=GetLastError;
ну а дальше читаешь.


 
MBo   (2002-12-10 07:22) [5]

procedure TForm1.Button1Click(Sender: TObject);
var fs:TFileStream;
buf:array[0..4095] of char;
NStr,i,j,BufSize,OldPos:integer;
s:string;
begin
NStr:=3;
fs:=TFileStream.Create("e:\zz.txt",fmOpenRead or fmShareDenyNone);
BufSize:=4096;
if fs.Size<BufSize then
BufSize:=fs.Size;
fs.Seek(-BufSize,soFromEnd);
fs.Read(buf,bufsize);
if buf[bufsize-1]=#10 then
OldPos:=BufSize-1
else
OldPos:=BufSize+1;
j:=0;
for i:=bufsize-2 downto 0 do begin
//последняя пустая строчка не учитывается. если нужна, то i:=bufsize-1
if buf[i]=#10 then begin
SetLength(s,OldPos-i-2);
Move(buf[i+1],s[1],OldPos-i-2);
OldPos:=i;
Memo1.Lines.Add(s);
inc(j);
if j=NStr then Break;
end;
end;
fs.Free;
end;


 
uu   (2002-12-10 18:58) [6]

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
N = 15; // Сколько символов в этих трех строках (не считая переводы строк)
procedure TForm1.Button1Click(Sender: TObject);
var
F: file of Char;
S: string;
Ch: Char;
begin
AssignFile(F, "c:\temp\myfile.txt");
Reset(F);
Seek(F, FileSize(F)-N-3*2);
S := "";
while not EOF(F) do begin
Read(F, Ch);
S := S+Ch;
end;
CloseFile(F);
ShowMessage(S);
end;
end.


 
не понял   (2002-12-10 19:07) [7]

Так ведь ежли файл текстовый, то:
1. Создаешь TStringList
2. TStringList.LoadFromFile("*.txt")
3. Количество строк = StringList.Count
4. А вот и строки:
StringList.strings[StringList.Count-1]
StringList.strings[StringList.Count-2]
StringList.strings[StringList.Count-3]
5. Само собой учитываем количство строк StringList.Count, что б не глючило
6. Конечно память скушает, зато легко



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-74723
RX
2002-12-14 03:29
2002.12.23
Глюки слокализацией


14-74895
Дмитрий К.К.
2002-12-04 14:03
2002.12.23
Текстовый редактор


1-74769
GOD
2002-12-10 23:19
2002.12.23
Как создать свой компонент


1-74690
Fernis
2002-12-13 04:32
2002.12.23
Свой коллекшен айтем...


1-74674
The_Vizit0r
2002-12-09 17:54
2002.12.23
Прочитать из файла!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский