Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++ Builder] Удаление информации из файла


Автор: Malish 7.6.2006, 19:41
Здравствуйте.

Помогите написать функцию?

Есть определенный текстовый(txt) фаил, из которого нужно удалить все буквы "а", или любой другой символ, с последующем выводом в Мемо. Как это сделать?
 

Автор: mr.Anderson 7.6.2006, 21:40
Я так понял, если юзаем Мемо, то создаем Вин-проект, так? Тогда могу предложить такой вариант:

1. Шаг первый: создадим глобальную переменную имени файла. Вне тела функции пишем:
Код

const AnsiString filename="name_of_your_file.txt";


2. Второе. Кидаем на форму ЛистБокс, затем рисуем в событии OnCreate главной формы:
Код

ListBox1->Items->LoadFromFile(filename.c_str());

3. А затем кидаем на форму кнопку для запуска функции и рисуем в ее OnClick - событии следующее:
Код

const AnsiString symbol="a";
int pos=0;

for(int i=0; i<=ListBox1->Items->Count-1; i++)
 if(pos==( ListBox1->Items->Strings[i].AnsiPos(symbol) ))
  ListBox1->Items->Strings[i].Delete(pos,1);

ListBox1->Items->SaveToFile(filename);

Memo1->Lines->LoadFromFile(filename);

Вот, в общем-то, и все! smile  

Автор: Malish 7.6.2006, 21:47
sim7,  спасибо, сейчас попробую. 

Автор: Malish 7.6.2006, 22:23
sim7, не получилось.

H-фаил.

Код

class TMalish
{
public:
AnsiString symbol;
AnsiString filename;
TMalish();
void Udalit();
};

class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *Button1;
        TEdit *Edit1;
        TLabel *Label1;
        TListBox *ListBox1;
        TMemo *Memo1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
        TMalish *Malish;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif



cpp-фаил

Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Malish = new TMalish();
}
//---------------------------------------------------------------------------
TMalish::TMalish()
{
filename = "Malish.txt";
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListBox1->Items->LoadFromFile(Malish->filename.c_str());
}
//---------------------------------------------------------------------------
void TMalish::Udalit()
{
symbol = Form1->Edit1->Text;
int pos=0;

for(int i=0; i<=Form1->ListBox1->Items->Count-1; i++)
{
 if(pos==(Form1->ListBox1->Items->Strings[i].AnsiPos(symbol) ))
  Form1->ListBox1->Items->Strings[i].Delete(pos,1);
 }
Form1->ListBox1->Items->SaveToFile(filename);

Form1->Memo1->Lines->LoadFromFile(filename);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Malish->Udalit();
}
//---------------------------------------------------------------------------


Добавлено @ 22:25 
в ListBox открывает фаил, а при нажатии на Button, в Memo отобрадается тоже текст что и в LisyBox-е 

Автор: mr.Anderson 8.6.2006, 20:20
В общем-то, я так и не понял, зачем вы намутили с классами... Куда они тут? Или так нужно? В общем, вот мой работоспособный код CPP-файла:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

const AnsiString filen="file.txt";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 const AnsiString symbol="à";
 int pos;
 bool flag=false;

 for(int i=0; i<=ListBox1->Items->Count-1; i++)
 do
 {
  if( ListBox1->Items->Strings[i].Pos(symbol) )
  {
   pos=ListBox1->Items->Strings[i].Pos(symbol);
   ListBox1->Items->Strings[i] = ListBox1->Items->Strings[i].Delete(pos,1);
   flag=true;
  }
  else flag=false;
 } while(flag);


 ListBox1->Items->SaveToFile(filen);

 Memo1->Lines->LoadFromFile(filen);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 ListBox1->Items->LoadFromFile(filen);
}
//---------------------------------------------------------------------------
 

Автор: Malish 8.6.2006, 20:23
Спасибо огромное за помощь.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)