Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

24.05.2009, 18:16. Просмотров 2651. Ответов 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;
    }
}
*Возврат билета(по введенной фамилии из базы удаляется информация о пассажире, вернувшего билеты);-вот здесь нужна помощь!
Заранее, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2009, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удаление строк из файла (C++):

Удаление строк из файла - C++
Имеется файл формата аа бб вв гг дд Как удалить введенную с клавиатуры строку? Только чтоб не оставалось пробелов

Удаление чётных строк из файла - C++
есть txt Документ из него нужно удалить каждую 2-ю строку,как это сделать!? гуглю целый день,варианты нашол но не на c++ =(

Удаление строк (символов) из файла - C++
Подскажите, пожалуйста как реализовать программно (1) исключение из исходного текстового файла подстрок, являющихся цепочками заданного...

Совмещение строк, удаление файла. - C++
нужно объединить 2 строки,содержащие путь к директории и имя файла , затем по результату объединения удалить файл StringCbCatNA...

Удаление строки из файла\либо удаление самого файла. - C++
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE *fout; open_file(&quot;abase.dat&quot;); ...

Удаление из строк - C++
В символьной строке удалить все слова состоящие из нечётного количества букв.

11
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
24.05.2009, 18:47 #2
Удалить строку из файла по большому счёту нельзя. Нужно просто переписать весь файл в другой, но пропустив нужную строку, а потом переименовать

Правильным вариантом было бы в момент работы программы всю информацию о пассажирах держать в памяти. Удаляй и крути-верти в памяти как угодно. В начале работы загружать информацию из файла, а в конце работы записывать. Ну или для порядка после каждой операции над записью записывать текущее состояние в файл (чтобы если программа кердыкнется, то хотя бы файл с изменеиями остался)
0
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
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);
}
где ошибка?
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
24.05.2009, 19:08 #4
"if(buff1!=p[i].FIO)" <-- срванивать строки надо через strcmp

Добавлено через 54 секунды
30-ю строку надо удалить, потому как если k==3, то на первой же итерации вылетишь из цикла, так ничего и не сделав
1
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
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);
}
подскажите где ошибка?
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
25.05.2009, 16:00 #6
Объясни, на кой хрен ты лепишь "else continue" и "else break'?
0
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
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;
}
это я исправил циклы
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
25.05.2009, 20:26 #8
Чтобы пропустить ненужное - у тебя всё накрыто if'ом. Убери "else continue" и "else break" - они не нужны. Псоледний код с виду выглядит правильно ("else continue" там избыточный, но он работу не портит)
0
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
25.05.2009, 20:32  [ТС] #9
этот код нормально работает с новым файлом,пропускает то что нужно...мне надо бы записать все в старый файл....может удалить старый и создать новый с таким же именем??только я не знаю как это сделать=((((
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
25.05.2009, 20:35 #10
Записываешь новый файл, закрываешь его, а потом переименовываешь в старый. В общем-то стандартный способ в подобных случаях. В линухе для переименовывания есть функция rename, посмотри, может под виндами так же называется
1
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
25.05.2009, 20:36  [ТС] #11
Спасибо за помощь!
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,131
Записей в блоге: 29
25.05.2009, 20:37 #12
Да не за что
0
25.05.2009, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2009, 20:37
Привет! Вот еще темы с ответами:

Удаление строк - C++
Есть код программы, она удаляет все числа между первым максимальным и последним минимальным числом. Проблема в том, что она удаляет еще...

Удаление из строк - C++
Удаление из строк всех букв со сжатием строк ( остаются цифры и символы) PS Дано: 2 строки по 80 символов.

Удаление строк из списка - C++
Задан список строк. Исключить из списка одинаковы строки. Не знаю как удалять строку из списка. // alg3.cpp : Defines the entry...

Матрицы. Удаление строк. - C++
Помогите решить задачку Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N строки с...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.