Главная страница
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
2-1132259609
FShadow
2005-11-17 23:33
2005.12.11
При выполнении SQL запроса выдает ошибку. Помогите!!!


3-1130393582
ALexDeep
2005-10-27 10:13
2005.12.11
Как из Delphi получить все базы данных SQL servera


3-1130331984
DmitryA
2005-10-26 17:06
2005.12.11
Как открыть таблицу Visual Foxpro?


14-1132530722
SVASH
2005-11-21 02:52
2005.12.11
USBPRINT.SYS


14-1132552735
Ega23
2005-11-21 08:58
2005.12.11
С днем рождения! 19 ноября