Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2012, 08:59   #11
proert
 
Регистрация: 26.09.2012
Сообщений: 7
Радость

Заранее спасибо огромное.
proert вне форума Ответить с цитированием
Старый 04.10.2012, 16:39   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пример во вложении.

исходники: FillCharToTextFile_src.rar

exe-шник: FillCharToTextFile_EXE.rar

для тех, кому любопытно, чтобы не скачивать архив, сообщаю,
там на кнопке "Затереть ФИО в файле" такой код висит:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sMinStr, sCurrentStr : AnsiString;
  OneChar : AnsiChar;
  i, sMinIndex : LongInt;
  fs : TFileStream;
begin
  if not fileExists(Edit1.Text) then begin
     Application.MessageBox('Файл не найден!', 'Ошибка', MB_ICONERROR or MB_OK);
     Exit
  end;

  try
    fs := TFileStream.Create(Edit1.Text, fmOpenReadWrite );

    sMinIndex := -1;
    sMinStr := '';

    sCurrentStr := '';

    // пройдёмся в цикле по файлу в поисках самой ранней записи
    for i := 0 to fs.Size - 1 do begin
       fs.Read(OneChar, SizeOf(OneChar));
       if Not (OneChar in [#13,#10]) then
          sCurrentStr := sCurrentStr + OneChar
       else begin
         if (sCurrentStr<>'') and (Copy(sCurrentStr,1,1)>'A') then begin
           if (sMinStr='')
                   or ((sMinStr<>'') and (sCurrentStr < sMinStr)) then
           begin
             sMinIndex := fs.Position - 1 - Length(sCurrentStr);
             sMinStr := sCurrentStr;

             // для отладки выведем промежуточные данные в мемо
             Memo1.Lines.Append('Отладка: обнаружена очередная более ранняя по алфавиту строчка.');
             Memo1.Lines.Append('   строка: '+sCurrentStr+' по смещению: '+IntToStr(sMinIndex));
           end
         end;
         sCurrentStr := '';
       end;
    end;

    // теперь, если была обнаружена требуемая строка - затрём её звёздочками
    if  (sMinStr<>'') and (sMinIndex>=0) then begin

      // сначала подготовим строчку, заполненную "звёздочками"
      sCurrentStr := '';
      for i := 1 to Length(sMinStr) do
        sCurrentStr := sCurrentStr + '*';

      fs.Seek(sMinIndex, soFromBeginning ); // установимся на нужную позицию в файле
      fs.Write(sCurrentStr[1], Length(sMinStr));

      // выведем в Memo сообщение о перезаписи файла
      Memo1.Lines.Append('------------ фамилия '+sMinStr+' затёрта в исходном файле.');
    end;
  finally
    FreeAndNil(fs);
  end;

end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных и технология хранения данных Kate1 Помощь студентам 2 17.11.2011 23:27
Свободный ввод данных Eldrich JavaScript, Ajax 5 13.04.2011 18:06
Небольшая база в Open Office База данных. sashaman Фриланс 3 11.04.2010 20:13
База данных с возможностью приема данных из файлов Excel Al_Sha БД в Delphi 6 16.10.2009 15:34
Русский язык и база данных MqSQL Linel PHP 1 25.02.2009 18:00