Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
#1

удаление строк из файла - C++

24.05.2009, 18:16. Просмотров 2432. Ответов 11
Метки нет (Все метки)

Здравствуйте, помогите с задачкой.(программа многомодульная)
*при покупке билета пассажир регистрируется в базе данных(Информация о каждом пассажире вводится в диалоге по запросам программы и сохраняется в файле База.txt, состоящем из отдельных записей, где одна запись хранит всю информацию об одном пассажире.);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "CyrIOS.h"
#include <conio.h>
#include "declaration.h"
#include <stdio.h>
FILE *f;
Passenger p[10];//структура 
 
void passenger(void)
{char c[50],a;
char *Filename="C:\\база.txt";
f=fopen(Filename,"wt");
int i;   
for(i=0;i<10;i++)
    {
    cout <<"введите ФИО"<<endl;
    gets(p[i].FIO);
    fprintf(f,"%s: %s\n","ФИО",p[i].FIO);
    cout <<"введите Паспорт"<<endl;
    gets(p[i].pasport);
    fprintf(f,"%s: %s\n","Паспорт",p[i].pasport);
    cout <<"введите пункт"<<endl;
    gets(p[i].punkt);
    fprintf(f,"%s: %s\n","Пункт",p[i].punkt);
    cout <<"введите номер"<<endl;;
    cin >>p[i].number;
    fprintf(f,"%s: %d\n","Номер",p[i].number);
    cout <<"введите билеты"<<endl;
    cin >>p[i].ticket;
    fprintf(f,"%s: %d\n","Билеты",p[i].ticket);
    gets(c);
    a=getch();
    if(a==26)
        break;
    }
}
*Возврат билета(по введенной фамилии из базы удаляется информация о пассажире, вернувшего билеты);-вот здесь нужна помощь!
Заранее, спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
24.05.2009, 18:47     удаление строк из файла #2
Удалить строку из файла по большому счёту нельзя. Нужно просто переписать весь файл в другой, но пропустив нужную строку, а потом переименовать

Правильным вариантом было бы в момент работы программы всю информацию о пассажирах держать в памяти. Удаляй и крути-верти в памяти как угодно. В начале работы загружать информацию из файла, а в конце работы записывать. Ну или для порядка после каждой операции над записью записывать текущее состояние в файл (чтобы если программа кердыкнется, то хотя бы файл с изменеиями остался)
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
24.05.2009, 19:04  [ТС]     удаление строк из файла #3
а если у меня информация в структуре хранится,можно же сначала найти фамилию в ней, а потом перезаписать стр-ру в файл(за исключением элемента содержащего эту фамилию).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "CyrIOS.h"
#include <conio.h>
#include "declaration.h"
#include <stdio.h>
FILE *t;
 
void return_ticket()
{char *Filename="C:\\база.txt";
t=fopen(Filename,"w");
char buff1[50];
cout <<"Введите фамилию для удаления"<<endl;
cin >>buff1;
int i,k=0;
for(i=0;i<10;i++)
    {
    if(buff1!=p[i].FIO)// хочу найти фамилию в структуре
    k++;//номер элемента стр-ры содержащий данную фамилию
    else break;
    }
for(int j=0;j<10;j++)
{
    if(j!=k)//записывать в файл структуру ,кроме элемента содержащую введенную фамилию  
    {fprintf(t,"%s:%s\n","ФИО",p[j].FIO);
        fprintf(t,"%s:%s\n","Паспорт",p[j].pasport);
        fprintf(t,"%s:%s\n","Пункт",p[j].punkt);
        fprintf(t,"%s:%d\n","Номер",p[j].number);
        fprintf(t,"%s:%d\n","Билеты :",p[j].ticket);
    }
    else break;
}
fclose(t);
}
где ошибка?
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
24.05.2009, 19:08     удаление строк из файла #4
"if(buff1!=p[i].FIO)" <-- срванивать строки надо через strcmp

Добавлено через 54 секунды
30-ю строку надо удалить, потому как если k==3, то на первой же итерации вылетишь из цикла, так ничего и не сделав
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
25.05.2009, 13:03  [ТС]     удаление строк из файла #5
Спасибо огромное!

Добавлено через 17 часов 54 минуты 32 секунды
как очистить(или удалить) файл, и перезаписать в него структуру???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "CyrIOS.h"
#include <conio.h>
#include "declaration.h"
#include <stdlib.h>
#include <stdio.h>
 
FILE *t;
 
void return_ticket()
{remove("C:\\база.txt")
char *Filename="C:\\база.txt";
t=fopen(Filename,"w");
char buff1[50];
cout <<"Введите фамилию для удаления"<<endl;
gets(buff1);
int i,k,control=0;
for(i=0;i<=10;i++)
    {
    k=strcmp(buff1,p[i].FIO);
    if(k==0) break;
    else control++;
    }
for(int j=0;j<=10;j++)
{   if(p[j].FIO!=NULL&&p[j].number!=NULL&&p[j].pasport!=NULL&&p[j].punkt!=NULL&&p[j].ticket!=NULL)
    {   if(j!=control)
                     {  
        fprintf(t,"%s:%s\n","ФИО",p[j].FIO);
        fprintf(t,"%s:%s\n","Паспорт",p[j].pasport);
        fprintf(t,"%s:%s\n","Пункт",p[j].punkt);
        fprintf(t,"%s:%d\n","Номер",p[j].number);
        fprintf(t,"%s:%d\n","Билеты :",p[j].ticket);
        }
        else continue;              
    }
else break;
} 
fclose(t);
}
подскажите где ошибка?
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
25.05.2009, 16:00     удаление строк из файла #6
Объясни, на кой хрен ты лепишь "else continue" и "else break'?
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
25.05.2009, 19:18  [ТС]     удаление строк из файла #7
что бы пропустить элемент структуры... мне нужно стр-ру перезаписать в файл без этого элемента, но он не пишет...если я создаю новый файл, то прога работает нормально.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(i=0;i<=10;i++)
    {
        k=strcmp(buff1,p[i].FIO);
        if(k==0) 
        {
            memset(&p[i], 0, sizeof(p[i]));//удаляю информацию
        }
    }
for(int j=0;j<=10;j++)
{if(p[j].FIO!=NULL&&p[j].number!=NULL&&p[j].pasport!=NULL&&p[j].punkt!=NULL&&p[j].ticket!=NULL)
        {   
        fprintf(t,"%s:%s\n","ФИО",p[j].FIO);
        fprintf(t,"%s:%s\n","Паспорт",p[j].pasport);
        fprintf(t,"%s:%s\n","Пункт",p[j].punkt);
        fprintf(t,"%s:%d\n","Номер",p[j].number);
        fprintf(t,"%s:%d\n","Билеты :",p[j].ticket);
        }
    else continue;
}
это я исправил циклы
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
25.05.2009, 20:26     удаление строк из файла #8
Чтобы пропустить ненужное - у тебя всё накрыто if'ом. Убери "else continue" и "else break" - они не нужны. Псоледний код с виду выглядит правильно ("else continue" там избыточный, но он работу не портит)
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
25.05.2009, 20:32  [ТС]     удаление строк из файла #9
этот код нормально работает с новым файлом,пропускает то что нужно...мне надо бы записать все в старый файл....может удалить старый и создать новый с таким же именем??только я не знаю как это сделать=((((
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
25.05.2009, 20:35     удаление строк из файла #10
Записываешь новый файл, закрываешь его, а потом переименовываешь в старый. В общем-то стандартный способ в подобных случаях. В линухе для переименовывания есть функция rename, посмотри, может под виндами так же называется
Voland-666
2 / 2 / 0
Регистрация: 02.05.2009
Сообщений: 62
25.05.2009, 20:36  [ТС]     удаление строк из файла #11
Спасибо за помощь!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2009, 20:37     удаление строк из файла
Еще ссылки по теме:

Матрицы. Удаление строк. C++
Удаление строк (символов) из файла C++
C++ Удаление чётных строк из файла
C++ Удаление строк из списка
C++ Как создать массив строк, считывая данные из файла (сортировка данных из файла)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17295 / 5543 / 347
Регистрация: 30.03.2009
Сообщений: 15,086
Записей в блоге: 26
25.05.2009, 20:37     удаление строк из файла #12
Да не за что
Yandex
Объявления
25.05.2009, 20:37     удаление строк из файла
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru