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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.093 c
4-1128649481
Wood
2005-10-07 05:44
2005.12.11
Расширенный MessageBox


2-1132514607
Nikos
2005-11-20 22:23
2005.12.11
Непонятная ошибка при завершении программы.


4-1128553402
П7
2005-10-06 03:03
2005.12.11
WinProc = метод класса. Как?


2-1132426180
tigrenok
2005-11-19 21:49
2005.12.11
Помогите с именами компонентов!!!


14-1132224022
PVOzerski
2005-11-17 13:40
2005.12.11
Похоже, цепанул на комп виря или трояна :(





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