Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> О работе с файлами. Помогите разобраться ........ 
:(
    Опции темы
Alkash
Дата 5.7.2004, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Вообщем задача такая- есть файл с расширением .cfg , как его просканировать на наличие определённых строк, если они есть - то добавить к ним значение из edit1, если строки нету - то добавить её целиком.И ещё, как поставить в edit ограничение на вводимое число?
Заранее благодарен.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Guest
Дата 5.7.2004, 12:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 s, test: string;
 F: TextFile;
begin
 test := 'test';
 AssignFile(F, 'c:\1.txt');
 Reset(F);
 repeat
   Readln(F, S);
   if s = test then
     begin
       s := s + ' ' + Edit1.Text;
       Write(F, s);
     end
   else
     begin
       s := test + Edit1.Text;
       Write(F, s);
     end;
 until EOF(f);
 CloseFile(F);
end;

Или что то в этом роде, просто делфи под рукой нету.

2.
Не используй едит, лучше SpinEdit, он красивше!!!

  Вверх
Albinos_x
Дата 5.7.2004, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



1.
Небольшой пример:

Цитата
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Spin, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
// радиокнопка "поиск по строке"
    RadioButton1: TRadioButton;
    Label1: TLabel;
// радиокнопка "Поиск по байту"
    RadioButton2: TRadioButton;
// кнопка выбора файла, где будем производить поиск
    SpeedButton1: TSpeedButton;
    OpenDialog1: TOpenDialog;
// суда вводим строку, которую ищем
    Edit1: TEdit;
// суда вводим байт который ищем (от 0 до 255)
    SpinEdit1: TSpinEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
// суда выводим результаты поиска
// адрес в шестнадцатеричном виде
    Memo1: TMemo;
// кнопка "поиск"
    SpeedButton2: TSpeedButton;
// кнопка "выход"
    SpeedButton3: TSpeedButton;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FN:String;
implementation

{$R *.dfm}

// Событие выбора радиокнопки "Строка"
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
// делаю поле ввода строки доступным
Edit1.Enabled:=true;
// делаю поле ввода байта недоступным
SpinEdit1.Enabled:=false;
end;

// Событие выбора радиокнопки "Байт"
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
// делаю поле ввода строки недоступным
Edit1.Enabled:=false;
// делаю поле ввода байта недоступным
SpinEdit1.Enabled:=true;
end;

// событие нажатия кнопки "Выбрать файл"
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
// запускаю диалог выбора файла
// одновременно проверяю запустился ли он
if OpenDialog1.Execute then
  // если запустился
  begin
  // запоминаю имя выбранного файла
  FN:=OpenDialog1.FileName;
  // делаю кнопку Поиск доступной
  SpeedButton2.Enabled:=true;
  // показываю в заголовке имя файла
  Caption:='Finder -  '+FN;
  end;
end;

// событие нажатия на кнопку "Выход"
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
// закрываю программу
Application.Terminate;
end;

// событин нажатия на кнопку "Поиск"
procedure TForm1.SpeedButton2Click(Sender: TObject);
var f:file of byte;
    find,findF:byte;
    index,size:integer;
    addres,stroka,strokaf:string;
    dlstr,i:byte;
begin
// очищаю поле вывода адресов найденного (поле "результаты поиска")
Memo1.Clear;
// обнуляю индикатор текущего адреса в файле
index:=0;
// привязываю файл к переменной
AssignFile(f,fn);
// открываю файл
Reset(f);
// проверяю выбранный вид поиска
if RadioButton1.Checked then
  // если по строке
  begin
  // читаю строку в переменную из поля ввода
  stroka:=Edit1.Text;
  // вычисляю размер введёной строки
  dlstr:=length(stroka);
  // вычисляю размер файла
  size:=filesize(f);
  // задаю диапазон поиска
  size:=size-dlstr+1;
  // открываю цикл с предусловием
  // пока позиция не равна диапазону
  while index<>size do
    begin
    // очищаю строку читаемоу из файла
    strokaf:='';
    // открываю цикл по длине строки
    for i:=1 to dlstr do
        begin
        // читаю байт из файла
        Read(f,findf);
        // формирую строку
        strokaf:=strokaf+Chr(findf);
        end;
    // сравниваю полученную строку с заданной
    if stroka=strokaf then
        // если строки равны
        begin
        // получаю адрес местонахождения
        // начала строки в шестнадцатеричном виде
        addres:='Ox'+IntToHex(index,0);
        // вывожу полученный адрес в поле "Результаты поиска"
        Memo1.Lines.Add(addres);
        end;
    // получаю адрес начала поиска
    // следующей строки
    index:=index+1;
    // перевожу позицию по полученному адресу
    Seek(f,index);
    end;
  end
  // если выбран вид поиска не по строке
  else
  begin
  // читаю заданный байт
  find:=SpinEdit1.Value;
  // открываю цикл с предусловием
  // пока не конец файла
  while not EOF(F) do
    begin
    // читаю байт из файла
    Read(f,findf);
    // сравниваю полученный байт с исходным
    if find=findf then
        // если байты равны
        begin
        // получаю адрес местонахождения
        // байта в шестнадцатеричном виде
        addres:='Ox'+IntToHex(index,0);
        // // вывожу полученный адрес в поле "Результаты поиска"
        Memo1.Lines.Add(addres);
        end;
    // прибавляю счетчик на 1
    // (получаю следующий адресс позиции)
    index:=index+1;
    end;
  end;
// закрываю открытый файл 
CloseFile(f);
// Вывожу сообщение об окончании поиска
MessageDlg('Поиск завершен',mtInformation,[mbOk],0);
end;

end.


Переделай его, как тебе нужно.
строку можно добавить командой WriteLn(f, s), где f - файловая переменная.

2.
смотри предыдущее сообщение
Добавлено @ 17:08
ps: Приведённый пример ищет заданную пользователем строку(байт) в любом файле


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 5.7.2004, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



А RichEdit? Там вроде есть возможность поиска...
PM   Вверх
Guest
Дата 6.7.2004, 03:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Pakshin A. S.
Не нужна возможность поиска.
Он не хочет искать в ричьедит-те, он хочет строки сравнивать!!!!

2Albinos_x
Ок, "+" -к тебе!Ё!!!!!

  Вверх
Albinos_x
Дата 7.7.2004, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



biggrin.gif biggrin.gif biggrin.gif


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.