Главная страница
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.058 c
1-1131700195
IGray
2005-11-11 12:09
2005.12.11
Как узнать, загружена ли чужая DLL abc.dll в память?


2-1132566744
arkan
2005-11-21 12:52
2005.12.11
База данных (SQL)


1-1132078212
AntonXXX
2005-11-15 21:10
2005.12.11
Запуск процедуры из DLL при клике


4-1127541341
GrayFace
2005-09-24 09:55
2005.12.11
Нерастяжимое окно. WS_SIZEBOX vs WS_SYSMENU.


3-1130232267
Ega23
2005-10-25 13:24
2005.12.11
could not produce a query plan from the optimizer - что это???