linkedin facebook linkedin facebook nod32

Borland C++ da matn muharriri

Muallif: Mengliyev Sh.

Qo`shilgan sana: 2014-12-04

Borland C++ da matn muharriri

Dastur tasnifi

Vazifa: Matn fayllarini tashkil qiuvchi va o’zgartiruvchi dastur tuzilsin. Diskdagi fayllarni ochish va kritilgan o’zgartirishlarni saqlash imkoniyatlari amalga oshirilsin.
Fayllarni izlash, hamda fayllarni saqlash joyini tanlash uchun fayllarni ochish/saqlash standart muloqatlardan foydalanilsin.
Faylning matni Memo maydonida aks ettirilsin.

Muammolar

ifstream va ofstream sinflarining ob’ektlari fayllarni hosil qilish va ular bilan ishlashda uzatilayotgan fayl nomini belgilar massivi sifatida ishlatadi. Standart muloqatlar esa «satr» (AnsiString) turidagi qiymatlarni qaytaradi. Ya’ni standart muloqat oynalari qaytarayotgan qiymatlarni to’g’ridan-to’g’ri ifstream yoki ofstream ob’ektlarga uzatishning imkoni yo’q.
Bu muammoni yechish uchun satrni belgilar massiviga almashtiruvchi protsedura tuzish tavsiya etiladi.

Zarur ko’nikmalar

Mazkur dasturni yozish uchun dastur yaratish muhitining standart komponentalari, fayllarni izlashga mo’ljallangan muloqat oynalari bilan ishlashni bilish kerak. Undan tashqari matn holatdagi fayllarni o’qish va diskda saqlashni ham bilish zarur.

Yechish

Mazkur dasturni yozishda shaklda mos ravishda fayllarni ochadigan va saqlaydigan tugmachalarni joylashtirishga to’g’ri keladi. Yana mos muloqat oynalarini ham o’rnatish talab etiladi. Tugmachalarni bosish xodisalarini qayta ishlovchiga muloqat oynalarini chaqirish o’rnatiladi: SaveDialog1->Execute. Muloqat oynasining OnCanClose xodisalarni qayta ishlovchisiga esa fayllar bilan ishlashni amalga oshiruvchi dastur kodi o’rnatiladi.
Fayllar bilan ishlash muloqat oynasining OnCanClose xodisasi sodir bo’lganda mos muloqat oynasining FileName xossasida tanlangan faylning nomi paydo bo’ladi. Aynan shu fayl bilan ishlash kerak bo’ladi.
Ifstream sinf ob’ektining satriga yozilgan fayl to’g’risidagi ma’lumotlarni uzatish uchun satrni belgilar massiviga almashtirishga to’g’ri keladi. Bu ishni massivning birinchi elementiga murojatni va bevosita satrni uzatish mo’ljallangan protsedura yaratib osongina amalga oshirish mumkin. Bu protsedura belgilarni satrdan olib, massivni ketma-ket, elementma-element to’ldiradi. Bu protseduraning yordamida barcha kerakli almashtirishlarni osongina bajarish mumkin.
Faylning mazmunini Memo1 maydoniga yozish uchun satrni ifstream sinfining getline() funksiyasi yordamida ketma-ket o’qish va uning qism ob’ekti Lines ( Memo1->Lines->Add(stroka); ) ning Add() funksiyasi yordamida Memo1 maydoniga yozish kerak.
Ma’lumotlarni faylda saqlash uchun faylga Memo1 ob’ektini satrini belgima-belgi, satr oxiri belgisi (g’n) ni qo’shib va yangi satrdan boshlab yozish zarur

Shakl

Shaklda ko’rinuvchi komponentalardan tashqari Dialogs bandining SaveDialog va LoadDialog komponentalari ham qatnashadi.

Dastur kodi

#include <vcl.h>
#include <fstream.h>

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void AnsiStringToCharPointer(char * c, AnsiString s, int n = 0)
{
int k = s.Length();
if(k > n && n != 0){ k = n; }
for(int i = 0; i < k; i++)
{
c[i] = s[i+1];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

OpenDialog1->title='Ochish';
OpenDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
SaveDialog1->title='Saqlash';

SaveDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenDialog1CanClose(TObject *Sender,
bool &CanClose)
{
AnsiString name = OpenDialog1->FileName;
char c[100] = "";
AnsiStringToCharPointer(c,name);
ifstream in(c);
Memo1->Text = "";
while(in.good())
{
in.getline(c,100);
Memo1->Lines->Add(c);
}
in.close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender,
bool &CanClose)
{
AnsiString name = SaveDialog1->FileName;
char c[1000] = "";
AnsiStringToCharPointer(c,name);
ofstream out(c);

for(int i = 1;i < Memo1->Lines->Count;i++)
{
AnsiString s = Memo1->Lines->operator [](i);
for(int j = 1; j < s.Length()+1; j++)
{
out << s[j];
}
out << 'g’n';
}
out.close();
}

2645 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений