Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Текстовый файл   Найти похожие ветки 

 
Neosted   (2005-11-27 19:32) [0]

Как из текстового файла скопировать строку с заданным номером(т.е. вторую, третью) и как из строки скопировать один символ?


 
begin...end ©   (2005-11-27 19:34) [1]

Вызвать нужное количество раз ReadLn(F), затем прочитать нужную строку -- ReadLn(F, S), и скопировать символ: if Length(S) > 0 then C := S[1]. Здесь F: TextFile, S: string, C: Char.


 
begin...end ©   (2005-11-27 19:36) [2]

Сорри, почему-то подумал, что нужно скопировать первый символ.

if Length(S) >= N then
 C := S[N],

где N -- номер символа.


 
Neosted   (2005-11-27 19:50) [3]

Огромное спасибо!


 
Gydvin ©   (2005-11-27 20:07) [4]

чтение нужной строки

код не мой

function GrabLine(const AFileName: string; ALine: Integer): string;
var
  fs: TFileStream;
  buf: packed array[0..4095] of Char;
  bufRead: Integer;
  bufPos: PChar;
  lineStart: PChar;
  tmp: string;
begin
  fs := TFileStream.Create(AFileName, fmOpenRead);
  try
    Dec(ALine);
    bufRead := 0;
    bufPos := nil;

    { read the first line specially }
    if ALine = 0 then
    begin
      bufRead := fs.Read(buf, SizeOf(buf));
      if bufRead = 0 then
        raise Exception.Create("Line not found");
      bufPos := buf;
    end else
      while ALine > 0 do
      begin
        { read in a buffer }
        bufRead := fs.Read(buf, SizeOf(buf));
        if bufRead = 0 then
          raise Exception.Create("Line not found");
        bufPos := buf;
        while (bufRead > 0) and (ALine > 0) do
        begin
          if bufPos^ = #10 then
            Dec(ALine);
          Inc(bufPos);
          Dec(bufRead);
        end;
      end;
    { Found the beginning of the line at bufPos... scan for end.
     2 cases:
       1) we"ll find it before the end of this buffer
       2) it"ll go beyond this buffer and into n more buffers }
    lineStart := bufPos;
    while (bufRead > 0) and (bufPos^ <> #10) do
    begin
      Inc(bufPos);
      Dec(bufRead);
    end;
    { if bufRead is positive, we"ll have found the end and we can leave. }
    SetString(Result, lineStart, bufPos - lineStart);
    { determine if there are more buffers to process }
    while bufRead = 0 do
    begin
      bufRead := fs.Read(buf, SizeOf(buf));
      lineStart := buf;
      bufPos := buf;
      while (bufRead > 0) and (bufPos^ <> #10) do
      begin
        Inc(bufPos);
        Dec(bufRead);
      end;
      SetString(tmp, lineStart, bufPos - lineStart);
      Result := Result + tmp;
    end;
  finally
    fs.Free;

  end;
  delete(Result,length(Result),1);
end;



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

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
4-1128951430
Gluk
2005-10-10 17:37
2005.12.11
Перехват окна сохранения


1-1131837827
HF-Trade
2005-11-13 02:23
2005.12.11
Как эмулировать дабл клик мыши в другое окно не перемещая курсор


14-1132404609
Гость101
2005-11-19 15:50
2005.12.11
Куда написать чтобы закрыли программу


2-1132964759
KGC
2005-11-26 03:25
2005.12.11
Отправка письма с аттачем с помощью WinSock


14-1132583518
ArtemESC
2005-11-21 17:31
2005.12.11
Как програмно выключить или перезагрузить компьютер?