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

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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17547 / 5785 / 370
Регистрация: 30.03.2009
Сообщений: 15,934
Записей в блоге: 26
24.05.2009, 18:47     удаление строк из файла #2
Удалить строку из файла по большому счёту нельзя. Нужно просто переписать весь файл в другой, но пропустив нужную строку, а потом переименовать

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

Удаление строк в файле - C++
Нужна программа, удаляющая в текстовом файле все строчки, начинающиеся на введенный символ. Хелп!

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

Удаление последних строк. - C++
Есть файл, содержащий неизвестное количество строк. как удалить 3 последние из них?

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

Удаление пустых строк из массива - C++
TCHAR display; //создаем массив SendMessage(Handle, WM_GETTEXT, 32768, (LPARAM)display); //заносим в массив содержимое окна ...


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

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

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