نمایش نتایج 1 تا 17 از 17

نام تاپیک: حذف رکورد مشخص در فایل در C++‎

  1. #1

    حذف رکورد مشخص در فایل در C++‎

    سلام : دوستان من برنامه ای نوشتم که ورودی رو از کاربر میگیره و در فایل متنی ذخیره میکنه ، حالا میخوام بدونم اگر ما رکورد هامون زیاد بود و خواستیم بین این همه یکی را حذف کنیم از فایل باید از چه

    دستوری استفاده کنیم .

    با تشکر
    Bvk


    به عنوان مثال : ورودی ما نام ، نام خانوادگی و شماره تلفن هست ، میخواهیم با دادن شماره تلفن رکورد را ابتدا پیدا کرده و سپس ورودی های نام و نام خانوادگی و تلفن مربوط به خود را پاک کند .

    ذخیره شده :

    نام : علی
    نام خانوادگی: رضایی
    تلفن : 09191234567


    حذف رکورد : 
    شماره تلفن را بگیرد : 09191234567
    و نام : علی نام خانوادگی : رضایی را حذف کند

  2. #2
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    این که شما بر حسب ورودی و نا مرتب اطلاعات رو در یک فایل ثبت میکنید .
    به نظر تنها راه ممکن همون جستجوی ترتیبی هست که وقتی به مقدار مورد نظر رسیدید پاک کنید

  3. #3

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    خب دوست عزیز همین پاک کردنش رو مشکل دارم به چه شکل ؟ اگه میشه توضیح بدید

  4. #4
    کاربر تازه وارد آواتار r.khodabakhshi
    تاریخ عضویت
    دی 1390
    محل زندگی
    اصفهان
    پست
    48

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    سلام.شما باید قبل از حذف حافظه ای رو که بهش اختصاص دادی آزاد کنی بعد پاکش کنی مثل کد زیر یک Structure داریم با نام Simple که یک رکورد با نام name داره وقتی که بخوام اونو کامل پاکش کنم باید اول حافظه اونو آزاد کنم بعد پاکش کنم،حالا شما باید اول بر اساس الگوریتم جستجوی که داری ساختاری که میخای حذفش کنی رو پیدا کنی و مثل کد زیر پاکش کنی:

    free((void*)(Simple->name));
    delete Simple->name;
    delete Simple;

  5. #5
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    @r.khodabakhshi > گویا گفتن در فایل . delete برای حافظه ی

    شما میتونید وقتی پیداش کردین تو فایل اندیس اونجا رو (محل قرار گیریش در فایل) رو جای دیگه قرار بدین . حالا زمانی که میخواید ی رکورد اضافه کنین بجای اینکه ته فایل بنویسین بررسی کنین آیا اندیس خالی وجود داره که اول اونجا بنویسین !

    (اگر شما میخواهید در یک نرم افزار واقعی استفاده کنید این روش که ترتیبی تو فایل متنی ذخیره کنید زیاد جالب نیست ! )

  6. #6
    کاربر تازه وارد آواتار r.khodabakhshi
    تاریخ عضویت
    دی 1390
    محل زندگی
    اصفهان
    پست
    48

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    ممنون.منظورم این بود برنامشونو جوری تغییر بدن که اون رکورد کامل حذف بشه و مجددا مابقی رو داخل فایل ذخیره کنن،روشی که شما میگی اینطوریه که اگه یک رکورد اون وسط پاک شد،هم فایل و نامرتب میکنه هم بیهوده فضای زیادی اشغال میکنه،ولی اینطوری با پاک کردن یک رکورد،فایل مجددا پر میشه و کاملا مرتبه.

  7. #7

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    اول از پاسختون بسیار متشکرم . من کد رو در اختیارتون قرار میدم تا بهتر متوجه بشید . ممنون میشم اگه درستش کنید .

    # include <fstream>
    # include <iostream>
    # include <string.h>
    using namespace std;

    class Daftarche
    {
    private :
    char name[20];
    char family[40];
    char phone[20];

    public :
    int menu();
    void add ();
    void view();
    void find();
    void About();
    };

    void main ()
    {
    Daftarche s;
    int temp;
    int exit=0;
    while (!exit)
    {
    temp=s.menu();
    if (temp==1)
    s.add();

    if (temp==2)
    s.view();

    if (temp==3)
    s.find();

    if (temp==4)
    s.About();

    if (temp==5)
    {
    cout<<"\n\n\n\n\n\n\t***************************GO OD BYE*************************";
    exit=1;
    }
    }

    }
    int Daftarche::menu ()
    {
    int c;

    cout<<"\n\t\t\t\t Menu";
    cout<<"\n\t\t\t__________________________________" ;
    cout<<"\n\n\t\t\t********************************* *";
    cout<<"\n\t\t\t* 1.Add *";
    cout<<"\n\t\t\t**********************************" ;
    cout<<"\n\n\n\t\t\t******************************* ***";
    cout<<"\n\t\t\t* 2.View List *";
    cout<<"\n\t\t\t**********************************" ;
    cout<<"\n\n\n\t\t\t******************************* ***";
    cout<<"\n\t\t\t* 3.Search *";
    cout<<"\n\t\t\t**********************************" ;
    cout<<"\n\n\n\t\t\t******************************* ***";
    cout<<"\n\t\t\t* 4.About Me *";
    cout<<"\n\t\t\t**********************************" ;
    cout<<"\n\n\n\t\t\t******************************* ***";
    cout<<"\n\t\t\t* 5.Exit *";
    cout<<"\n\t\t\t**********************************" ;
    cout<<"\n\t\t\t__________________________________" ;
    cout<<"\n\n\t\t\t Yek Gozine Vared Konid (1-5) :";
    cin>>c;
    if((c<=5)&&(c>0))
    {
    return c ;
    }
    menu();
    return 0;

    }
    void Daftarche::add ()
    {
    Daftarche set;
    ofstream myfile("Address.txt", ios::app); //تمام عملیات خروجی در انتهای فایل انجام می شود. محتوای فعلی به محتوای قبلی اضافه می شود.ios::app
    if(!myfile)
    {
    cout<<" Can Not Open File .";


    }

    cout<<"\n\n\t\tEnter First name : ";
    cin>>set.name;
    cout<<"\n\n\t\tEnter Last name : ";
    cin>>set.family;
    cout<<"\n\n\t\tEnter Phone Number : ";
    cin>>set.phone;

    myfile<< set.name<<" "<< set.family <<" "<< set.phone <<" "<<"\n" ;
    myfile.close();
    }
    void Daftarche::view()
    {
    Daftarche set;

    ifstream myfile("address.txt");


    while (!myfile.eof())
    {

    myfile >>set.name>>set.family>>set.phone;
    cout<< " \n\n\t\t First Name : " <<set.name<<"\n\t\t Last Name : "<<set.family
    <<"\n\t\t Phone Number : "<<set.phone<<endl;

    }
    myfile.close();

    }


    void Daftarche::About ()
    {
    cout<<"\t\t*************************************** ***********";
    cout<<"\n\t\t\t Project : Phone Book";
    cout<<"\n\t\t\t Name Student : Behrooz Last Name : Bvk";


    cout<<"\t\t*************************************** ***********";
    }


    void Daftarche::find ()
    {
    Daftarche set;
    char id[20];

    cout<<"\n\n\tEnter Phone Number : ";
    cin>>id;
    ifstream myfile("address.txt");
    myfile >>set.name>>set.family>>set.phone;
    if(!myfile)
    {
    cout<<" Can Not Open File .";

    }
    while(!myfile.eof()) //آیا در انتهای فایل باز شده می باشد یا خیر : eof
    {

    if(! strcmp(id,set.phone))
    {

    cout<< " \n\n\t\t First Name : " <<set.name<<"\n\t\t Last Name : "<<set.family
    <<"\n\t\t Phone Number : "<<set.phone;
    break;
    }
    myfile >>set.name>>set.family>>set.phone;
    }
    if(myfile.eof())
    {

    cout<<"\n\n\n\t\t****************** Sorry **********************\n\n";
    cout<<"\t\t\t Mokhatabe Vared Shode Mojod Nemibashad";
    }
    myfile.close();

    }

  8. #8

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    یعنی کسی نیست به ما جواب بده ؟ ؟؟

  9. #9
    کاربر تازه وارد آواتار r.khodabakhshi
    تاریخ عضویت
    دی 1390
    محل زندگی
    اصفهان
    پست
    48

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    سلام.اینطور که شما برنامتون رو پیاده سازی کردید باید به روشی که دوستمون target# گفتند عمل کنی،روشی که من مد نظرم بود پیاده سازی با استفاده از صف بود که بتونی یک ساختارو کامل پاک کنی.
    الان کدتون مشکلش چیه؟تابع find مگه کار نمیکنه؟

  10. #10

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    چرا کار میکنه ولی اگر من بخوام مقایسه کنم و جاش از space استفاده کنم برای پاک کردنش هنوز فضای من اشغال شده ؟ باید طوری پاک بشه که فضا آزاد بشه

  11. #11
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    چرا کار میکنه ولی اگر من بخوام مقایسه کنم و جاش از space استفاده کنم برای پاک کردنش هنوز فضای من اشغال شده ؟ باید طوری پاک بشه که فضا آزاد بشه
    اشکالی نداره . چون اگه قرار باشه با این وضعیت هر بار که یک چیز رو حذف میکنی کل فایلو دوباره بازسازی کنی خیلی کارایی میاد پایین !

  12. #12

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    خب حالا برای جایگزین کردنش چه کنم

  13. #13
    کاربر تازه وارد آواتار r.khodabakhshi
    تاریخ عضویت
    دی 1390
    محل زندگی
    اصفهان
    پست
    48

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    سلام،دوست عزیز این تالار قوانین خودشو داره من نمی تونم کد کاملشو در اختیارت قرار بدم واسه اینکار اولا خودت که برنامه نویس ماهری هستی دوما باید بری قسمت درخواست پروژه.

    ببین شما با استفاده از صف بیا و برنامتو پیاده سازی کن یعنی اطلاعات نفر اول میشه عضو اول صف،نفر دوم عضو دوم،.... تا آخر وقتی تموم شد حالا بیا از اول صف تا آخر و بخون بریز توی فایل بعد مرحله بعد بر اساس جستجو اون عضو رو پیدا کن و پاکش کن و فایلو دوباره پر کن.

    روش دوم که خیلی نسبت به روش صف بهتره،پیاده سازی با لیست پیوندیه.هم راحتتره هم قضیه پاک کردنش آسون تره.

    واسه لیست پیوندی هم بهترین مرجع یادگیری یا یادآوری سایت:

    www.cplusplus.com و همچنین دوست عزیزمون google

    موفق باشی.

  14. #14
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: حذف رکورد مشخص در فایل در C++‎‎

    برا اینکه سریع کارت راه بیوفته فعلا ی کاری کن ی متغیر به نامISValid به کلاست اضافه کن . و اونو یک بده هر وقت میخوای پاک کنی همینو صفر کن تو فایل . وقت جستجو و اینا هم وقتی این متغیر صفر در نظر نگیرش !
       private :
    char name[20];
    char family[40];
    char phone[20];
    int IsValid;

    set.IsValid = 1
    myfile<< Set.IsValid<< set.name<<" "<< set.family <<" "<< set.phone <<" "<<"\n" ;


     if(! strcmp(id,set.phone) && (set.IsValid))

  15. #15

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    نقل قول نوشته شده توسط r.khodabakhshi مشاهده تاپیک
    سلام،دوست عزیز این تالار قوانین خودشو داره من نمی تونم کد کاملشو در اختیارت قرار بدم واسه اینکار اولا خودت که برنامه نویس ماهری هستی دوما باید بری قسمت درخواست پروژه.

    سلام : ضمن تشکر بابت راهنمایی، باید عرض کنم دوست عزیز من برنامه رو کامل نوشتم فقط قسمتی از کد رو راهنمایی خواستم نه کل سورس رو .

    روش دوم که خیلی نسبت به روش صف بهتره،پیاده سازی با لیست پیوندیه.هم راحتتره هم قضیه پاک کردنش آسون تره.

    واسه لیست پیوندی هم بهترین مرجع یادگیری یا یادآوری سایت:

    www.cplusplus.com و همچنین دوست عزیزمون google

    موفق باشی.
    متاسفانه لیست پیوندی در ساختمان داده ارائه میشود و من آشنایی باهاش ندارم .

  16. #16

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    سلام دوستان عزیز من یه برنامه به زبان ++c دارم میخواستم قسمت حذف رو بهش اضافه کنم کسی میتونه کمک کنه کدش رو برام اضافه کنه خیلی ضروری است برای فردا میخوامش
    #include "iostream.h"
    #include "conio.h"
    #include "string.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "io.h"
    #include "fcntl.h"

    #define max 50

    class student {
    public :
    char numst[11];
    char name[15];
    char famili[20];
    double score[4];
    double ave;
    student(); //initializing
    ~student(); //destructing
    set_null(){name[0]=numst[0]='\0';}
    }st[max];
    //************************************
    student::student(){ //initializing
    set_null();
    }
    //*************************************
    student::~student(){ //destructing
    set_null();
    }
    //*************************************
    class Enter {
    private :
    void save();
    public :
    void add();
    void edit();
    void search();
    void print();
    void len_file();
    void load();
    }e;
    //************************************************** ****************************
    void Enter::add(){
    int i;
    double sum=0.00;

    for(i=0;i<max && st[i].name[0]!='\0';i++);

    clrscr();
    cout<<"\n Enter a name : ";
    cin>>st[i].name;

    cout<<"\n Enter a famili : ";
    cin>>st[i].famili;

    cout<<"\n Enter a numst : ";
    cin>>st[i].numst;


    for(int j=0;j<4;j++){
    cout<<"\n Enter a score "<<j+1<<" : ";
    cin>>st[i].score[j];
    sum+=st[i].score[j];
    }

    st[i].ave=sum/4;

    e.save();
    }
    //************************************************** ****************************
    void Enter::edit(){
    char tmp[11];
    int i,flag=0;;
    double sum=0.00;

    clrscr();

    cout<<"\n Enter a numst for edit : ";
    cin>>tmp;

    for(i=0;i<max && st[i].name[0]!='\0';i++)
    if(strcmp(st[i].numst,tmp)==0){
    cout<<"\n Enter a new name : ";
    cin>>st[i].name;

    cout<<"\n Enter a new famili : ";
    cin>>st[i].famili;


    for(int j=0;j<4;j++){
    cout<<"\n Enter a new score "<<j+1<<" : ";
    cin>>st[i].score[j];
    sum+=st[i].score[j];
    }

    st[i].ave=sum/4;

    cout<<"\n for continue . press key...";
    getch();
    flag=1;
    e.save();
    }

    if(flag==0){
    cout<<"\n Not found . press key...";
    getch();
    return ;
    }
    }
    //************************************************** ****************************
    void Enter::search(){
    char tmp[15];
    int i,flag=0;


    clrscr();

    cout<<"\n Enter a name for search : ";
    cin>>tmp;

    for(i=0;i<max && st[i].name[0]!='\0';i++)
    if(strcmp(st[i].name,tmp)==0){
    cout<<"\n Name = "<<st[i].name;

    cout<<"\n Famili = "<<st[i].famili;


    for(int j=0;j<4;j++)
    cout<<"\n Score "<<j+1<<" = "<<st[i].score[j];

    cout<<"\n average = "<<st[i].ave;

    cout<<"\n for continue . press key...";
    getch();
    flag=1;
    }

    if(flag==0){
    cout<<"\n Not found . press key...";
    getch();
    return ;
    }
    }
    //************************************************** ****************************
    void Enter::print(){
    int i;

    clrscr();

    for(i=0;i<max && st[i].name[0]!='\0';i++){

    cout<<"\n Name = "<<st[i].name;

    cout<<"\n Famili = "<<st[i].famili;

    for(int j=0;j<4;j++)
    cout<<"\n Score "<<j+1<<" = "<<st[i].score[j];

    cout<<"\n average = "<<st[i].ave<<"\n\n";
    }

    cout<<"\n for continue . press key...";
    getch();

    }
    //************************************************** ****************************
    void Enter::save(void){
    register int i;
    FILE *fp;

    fp=fopen("c:\\st.dat","w+b");
    if(!fp){
    cout<<"\n Cannot open file press key ...";
    getch();
    return ;
    }

    for(i=0;i<max && st[i].name[0]!='\0';i++)
    fwrite(&st[i],sizeof(class student),1,fp);

    fclose(fp);
    }
    //************************************************** ****************************
    void Enter::load(void){
    register int i;
    FILE *fp;

    clrscr();

    fp=fopen("c:\\st.dat","rb");
    if(!fp){
    cout<<"\n Cannot open file press key ...";
    getch();
    return ;
    }

    for(i=0;i<max;i++){
    fread(&st[i],sizeof(class student),1,fp);
    if(feof(fp)){
    clrscr();
    cout<<" Data loaded press a key ...";
    getch();
    return ;
    }
    }
    fclose(fp);
    }
    //************************************************** ****************************
    void Enter::len_file(){
    int handle;

    clrscr();

    handle=open("c:\\st.dat",O_RDONLY);

    cout<<"\n File lenght in byte = "<<filelength(handle)<<" byte ";
    getch();

    close(handle);

    }
    //************************************************** ****************
    void main(){
    int num;

    e.load();

    do{
    clrscr();
    cout<<"\t\t Welcome\n";
    cout<<"\n 1).Add";
    cout<<"\n 2).Edit";
    cout<<"\n 3).Search";
    cout<<"\n 4).List";
    cout<<"\n 5).Length file";
    cout<<"\n 6).Exit";
    cout<<"\n\n Enter a number (1-6) :";
    num=getche()-48;
    getch();

    switch (num){
    case 1 : e.add();
    break;
    case 2 : e.edit();
    break;
    case 3 : e.search();
    break;
    case 4 : e.print();
    break;
    case 5 : e.len_file();
    break;
    case 6 : exit(1);
    }
    }while(1);
    }// end program

  17. #17

    نقل قول: حذف رکورد مشخص در فایل در C++‎

    سلام . من میخام که خالی بودن یک فایل رو چک کنم چطوریه از این دستور هم استفاده کردم جواب نداد
    (if(myfile.open("filename")=NULL
    cerr<<"file is empty";


تاپیک های مشابه

  1. حذف رکورد خاص از یک فایل xml
    نوشته شده توسط sayan در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 05 تیر 1390, 08:37 صبح
  2. یه مشکل در حذف رکورد
    نوشته شده توسط Morteza Manafpour در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 22 اردیبهشت 1384, 14:27 عصر
  3. حذف رکورد با TADOQuery
    نوشته شده توسط idic1 در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: دوشنبه 22 فروردین 1384, 04:06 صبح
  4. دسترسی به یک رکورد مشخص در ADOTable
    نوشته شده توسط داوود در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: دوشنبه 16 شهریور 1383, 08:20 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •