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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2017, 22:38   #1
ANGeL_TbMbI
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 14
По умолчанию Удаление строк

Здравствуйте, возникла проблема с удалением строк из файла... Был бы благодарен за помощь

Код:
#include<fstream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<string.h>



struct bd {int id;
          char fio[30];
          int pas;
          int got;
          char tgot[6];
          int vart;} s[200];  int i;

//ïðîòîòèï ôóíêöèè ïîëüçîâàòåëÿ
void kol();


//ãëàâíàÿ ôóíêöèÿ
void main()
{
kol();
}


void kol()
{  char c[30];
  int k=0;
  int vop;
  ifstream f("DAT1.TXT");
  cout<<"Ñîäåðæèìîå ôàéëà "<<"DAT1.TXT"<<endl;
  f>>k;
  for(int i=0;i<k;i++){
  	f>>s[i].id>>s[i].fio>>s[i].pas>>s[i].got>>s[i].tgot>>s[i].vart;
  }
cout<<"___________________________________________________________________";
cout<<"\n |ID |Name                          |Pasport|Nomer|Type   |Vartist|";
cout<<"\n |===|==============================|=======|=====|=======|=======|";

for(int i=0;i<k;i++){
	printf("\n |%3d|%30s|%7d|%5d|%7s|%7d|",s[i].id,s[i].fio,s[i].pas,s[i].got,s[i].tgot, s[i].vart) ;
	cout<<"\n |---|------------------------------|-------|-----|-------|-------";
}
  f.close();

     //vibor

    if( printf( "\nAdd zapis [1] " ))
    {

}

   if(   printf( "\nDelete zapis [2]" ))
   {

    }

    if( printf( "\nSort AVG [3] " ))
    {

}

	if( printf( "\nSort DEC [4] " ))
    {
       scanf( "%d", &vop );
}

    if ( vop == 1 ) {

        printf ("Add zapis : \n" );                 //NACHALO DOBAVLENIA

         ofstream f ;
         f.open("DAT1.TXT", fstream::app);
    cout<<"\n id  "  ;
     cin>> s[k].id ;
       f <<"\n " << s[k].id ;;
       cout<<"\n FIO  "  ;
        cin>> s[k].fio  ;
         f <<"\n " << s[k].fio , "\n" ;
          cout<<"\n Pasport  "  ;
          cin>> s[k].pas ;
           f <<"\n " << s[k].pas, "\n" ;
          cout<<"\n Nomer v otele  " ;
           cin>> s[k].got ;
            f <<"\n " <<   s[k].got, "\n" ;
            cout<<"\n Type otelya  ";
           cin>> s[k].tgot ;
            f <<"\n " << s[k].tgot, "\n" ;
            cout<<"\n Vartist  "  ;
             cin>> s[k].vart ;

              f <<"\n " << s[k].vart ;
           f.open("DAT1.txt");
//f << k+1;


        getch();
    }                                              //KONEC DOBAVLENIA

    else if ( vop == 2 ) {
        printf( "Delete zapis : \n" );             //NACHALO UDALENIA

            ofstream g ;
         g.open("DAT2.TXT");

            cout<<"\n id  "  ;
     cin>> s[k].id ;
       g <<"\n " << s[k].id ;




                                                    //KONEC UDALENIA
    }

          else if ( vop == 3 )


          {
        printf( "Sortirovka AVG : \n" ) ;

          //if (s[i].got>s[i].got) swap(s[i].got,s[i].got);

        //  if (a>c) swap(a,c);
         // if (b>c) swap(b,c);
     //  qsort(s, k, sizeof(bd), s.got);
        //printf("\nSortirovka_po_usluge:\n");
       // for ( i = 0; i < k; ++i )
          //      printf("\n |%3d|%30s|%7d|%5d|%7s|%7d|",s[i].id,s[i].fio,s[i].pas,s[i].got,s[i].tgot, s[i].vart) ;

       /*qsort(salon, NUM_PERSONS, sizeof(klient), imja_cmp);
        printf("\nSortirovka_po_imeni:\n");
        for ( i = 0; i < N; ++i )
                 printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);

         qsort(salon, N, sizeof(klient), familija_cmp);
        printf("\nSortirovka_po_familii:\n");
        for ( i = 0; i < N; ++i )
                printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
          qsort(salon, N, sizeof(klient), data_cmp);
        printf("\nSortirovka_po_date:\n");
        for ( i = 0; i < N; ++i )
                 printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);

                  qsort(salon, N, sizeof(klient), summa_cmp);
        printf("\nSortirovka_po_summe:\n");
        for ( i = 0; i < N; ++i )
                printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);     */

	}


    else if ( vop == 4 ) {
        printf( "Sortirovka DEC : \n" );
    }

    else {
       printf( "vvedite odin iz variantov\n" );
    }

     system("cls");


           kol();
  _getch(); //âîçâðàùàåìîå çíà÷åíèå ôóíêöèè
}
ANGeL_TbMbI вне форума Ответить с цитированием
Старый 05.11.2017, 09:10   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я в принципе забацал удаление из файла:

Код:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
	char ch[100];
	int N;
	bool flag = false;

	{
		ifstream fs;           
		fs.open("D:\\1.txt"); 
		if (fs.is_open())
		{
			N = 0;
			while (!fs.eof())
			{
				fs >> ch[N];
				N++;
			}
			N--;
			fs.close();
		}	
	}

	{
		ofstream fs;           
		fs.open("D:\\1.txt"); 
		if (fs.is_open())
		{
			for (int i = 0; i < N; i++)
			{
				if (ch[i] == '3')
				{
					flag = true;
					continue;
				}				
				fs << ch[i] << "\n";
			}
			fs.close();
		}
	}

	if (flag == true)
	{
		cout << "Net takogo symvola!";
	}
	return 0;
}
если в файле будет:
Код:
1
2
3
4
5
6
то станет:
Код:
1
2
4
5
6

Единственный вопрос, который ты должен задать себе: "А нужно ли скачивать содержимое файла в оперативку (в моём примере - в массив "ch") прежде чем править"?
Или сразу изменять файл?

Ты же должен знать, что в С++ есть разные классы по работе с файлами. Некоторые позволяют только читать из файла, а другие - только писать,
но есть и третьи, которые более универсальные т.к. с помощью их можно и то и то. Типа такого:


22.jpg


И, соответственно, логика программы будет отличаться в зависимости от того, что используешь...

Тебе надо это выяснить - другой путь перезаписи файла - и как оба этих варианта соотносятся с твоим заданием. Т.е. что и когда правится: сначала правятся данные в оперативке, а потом (по приказу пользователя), эти изменения переносятся в файл. Или, в тоже самое время, и то и то правятся одновременно... Или программа будет взаимодействует чисто с файлом и всё...

Короче, делай по своему заданию...

Последний раз редактировалось ura_111; 05.11.2017 в 09:49.
ura_111 вне форума Ответить с цитированием
Старый 05.11.2017, 16:04   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Хотя, если предполагается, что "k" будет находиться в файле:


22.jpg


то в первой части программы можно не находить "N", а просто его "скачать".


p.s.: обрати внимание по коду, что данные самого "ch[i]" (в оператике) не затронуты, а удалена запись только в файле.
А если ты хочешь поправить в оперативке тоже, то сначала нужно там править, и только после чего писать в файл, - я уже писал это, всё зависит от твоего задания и местных условий... В принципе, файл - это тот же (дополнительный) массив, из которого можно вернуть данные назад (в чистовой массив "ch[i]"). Хотя в последнем случае, файл и оперативка будут изменены одновременно, но это не стыкуется с п. меня "6", в котором просят пользователя именно подтвердить внесения изменений в файле... Или можно действительно завести доп. массив...

Короче, зависит от местных условий...

Последний раз редактировалось ura_111; 05.11.2017 в 17:10.
ura_111 вне форума Ответить с цитированием
Старый 05.11.2017, 19:26   #4
ANGeL_TbMbI
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 14
По умолчанию

Немного запутался ^^' простите, что так нагружаю. Насчет местных условий - необходимо, чтоб строка удалялась по введенному id. Что-то не полуается реализовать...
ANGeL_TbMbI вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк Chuikov Microsoft Office Excel 6 22.10.2014 12:06
Удаление строк Zelenaya Microsoft Office Excel 6 26.09.2012 09:55
Удаление из строк Михаил_444 Паскаль, Turbo Pascal, PascalABC.NET 1 14.11.2011 21:23
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38