С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34

Функция: поиск в файле по ключу и удаление всей информации о стране по ее названию

16.06.2017, 00:02. Показов 2847. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Есть структура
C++
1
2
3
4
5
6
struct CountryInfo
{
string Country;
string Capital;
string OfficialLanguage;
float Population;
все пишется с клавиатуры в файл "CountryInfo.txt", нужна функция для поиска по файлу по ключу "Country" и функция удаления всей информации о стране по ее названию.

Еще очень зеленый. Буду рад любой помощи.! Заранее благодарен.!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2017, 00:02
Ответы с готовыми решениями:

Удаление всей информации в СТРИНГРИД1
Приветствую Всех. Работаю со СТРИНГРИД1. Мы знаем, что данные компонентов Мемо1, ЭДИТ1, можно удалить с помощью метода КЛИЯ( ). Здесь все...

Удаление ВСЕЙ информации о фирме
Имеется несколько фирм в 1с. Ессно везде велась деятельность. Вопрос: как удалить одну из фирм полностью, включая все привязанные...

Вывод всей информации о выбранном файле
if(GetFileInformationByHandle(hf, &lpFileInformation)) cout << "ИНФОРМАЦИЯ О ВЫБРАННОМ ФАЙЛЕ:" << ?? использую эту функцию ...

15
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.06.2017, 08:32
Цикл + чтение и сравнение.
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
16.06.2017, 08:37
А как записывает информация в файл? С помощью функций read/write или с помощью форматированного ввода/вывода?
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
16.06.2017, 16:33  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
А как записывает информация в файл? С помощью функций read/write илис помощью форматированного ввода/вывода?
Как-то так...

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
void Add()
    {
file.open(filename,ios::app);
cout<<"\n";
cout<<"Vvedite dannie";
cout<<"\n";
        CountryInfo* pAddingCountry = new CountryInfo;
        cout << "Enter Coutry: ";
cin >> pAddingCountry->Country;
cout << "Enter Capital: ";
            cin >> pAddingCountry->Capital;
            cout << "Enter OfficialLanguage: ";
            cin >> pAddingCountry->OfficialLanguage;
            cout << "Enter Population: ";
            cin >> pAddingCountry->Population;
 
        if(pFirstCountry!=NULL) { // если список не пуст,
            GetLast()->pNextCountry = pAddingCountry;   // делаем
пациента pAdd последней
        }
        else { //   если список пуст, то добавлем данные в начало списка.
            pFirstCountry = pAddingCountry;
        }
        file<<pAddingCountry->Country<<"\n"<<pAddingCountry->Capital<<"\n"<<pAddingCountry->OfficialLanguage<<"\n"<<pAddingCountry->Population<<"\n";
file.close();
getch();
    }
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
18.06.2017, 23:11  [ТС]
Никто не подскажет?...(
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.06.2017, 08:35
C++
1
2
3
4
5
6
7
CountryInfo i;
string c = "Россия";
 
while (file >> i.Country >> i.Capital >> i.OfficialLanguage >> i.Population)
{
    if (i.Country == с) //...
}
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
19.06.2017, 11:32  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
C++
Спасибо за ответ.

Подскажите еще пожалуйста как сделать функцию вывода на экран содержимого файла?
Чтобы выводилось например.:

N Country Capital Language Population

1 France Paris French 66,991,000

Я что-то написал, но работает не так как хотелось бы.
(количество стран заранее неизвестно)

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
void ShowAll()
    {   
        CountryInfo* pAddingCountry = new CountryInfo;
        
        string line;
        ifstream myfile ("CountryInfo.txt");
        if (myfile.is_open())
        {
            while (! myfile.eof() )
            {
                //getline (myfile,line);
                    cout << endl << "     Country\t Capital\t OfficialLanguage\t  Population\t" << endl << endl;                 
                    myfile>> pAddingCountry->Country >> pAddingCountry->Capital>>pAddingCountry->OfficialLanguage >> pAddingCountry->Population;//получение из файла информации
                    cout << pAddingCountry->Country << " \t" <<pAddingCountry->Capital<< "\t" <<pAddingCountry->OfficialLanguage <<"\t" << pAddingCountry->Population;
                
            myfile.close();
        }
        }
 
        else 
        {
            cout << "Unable to open file"; 
        }
    }
 
};
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.06.2017, 11:40
Цитата Сообщение от GraK Посмотреть сообщение
как сделать функцию вывода на экран
Я же показал как чтение выглядит. В цикле вместо условия сделай вывод полей i.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
19.06.2017, 16:29  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
В цикле вместо условия сделай вывод полей i.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ShowAll()
    {           
        CountryInfo* cont = new CountryInfo;
        int i;      
        ifstream myfile ("CountryInfo.txt");
        cout << endl << "\tCountry\t Capital\t OfficialLanguage\t  Population" << endl << endl;                 
        for(i = 0; i < 10; i++)
        { 
            myfile >> cont[i].Country >> cont[i].Capital>>cont[i].OfficialLanguage >> cont[i].Population;
            cout <<"\t"<< cont[i].Country<< "\t" <<cont[i].Capital<< "\t" <<cont[i].OfficialLanguage <<"\t" << cont[i].Population<<endl;
            
        }
        
 
        }
Что я делаю не так?
Выводит только первую запись.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.06.2017, 17:55
Цитата Сообщение от GraK Посмотреть сообщение
Что я делаю не так?
Много всего. Зачем, например, ты постоянно динамически создаёшь эту структуру? И освобождение памяти не делаешь.

Я говорю про i в моём примере: i.Country и др.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
19.06.2017, 20:24  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Я говорю про i в моём примере: i.Country и др.
Если не сложно, напишите пожалуйста код для этой функции. Заранее очень благодарен.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.06.2017, 20:37
Лучший ответ Сообщение было отмечено GraK как решение

Решение

C++
1
2
3
4
5
6
7
8
9
CountryInfo i;
 
ifstream file ("CountryInfo.txt");
if (file.is_open())
{
  cout << endl << "\tCountry\tCapital\tOfficialLanguage\tPopulation" << endl << endl;
  while (file >> i.Country >> i.Capital >> i.OfficialLanguage >> i.Population)
      cout << i.Country << '\t' << i.Capital << '\t' << i.OfficialLanguage << '\t' << i.Population << endl;
}
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
19.06.2017, 22:51  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
CountryInfo i; ifstream file ("CountryInfo.txt"); if (file.is_open()) { cout << endl << "\tCountry\tCapital\tOfficialLanguage\tPopulation" << endl << endl; while (file >> i.Country >> i.Capital >> i.OfficialLanguage >> i.Population) cout << i.Country << '\t' << i.Capital << '\t' << i.OfficialLanguage << '\t' << i.Population << endl; }
Огромное спасибо. Я понимаю что это наверное очень не красиво, но не подскажите как удалить всю информацию о стране, вводя только ее название? Я написал код чтобы найти все страны в файле с таким названием, но не знаю как правильно сделать удаление.. Помогите пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*char find[100], s[255];
cout << "Country: ";
cin >> find;
 
ifstream search("CountryInfo.txt");
 
while (search.getline(s, 255))
{
if (strcmp(s, find) == 0)
{
cout << endl << "Country find" << endl;
}
}
cout << endl << "You want to delete information about this country?" << endl;
cout << endl << "Enter [1] - Yes or [2] - No: " << endl;
int i=0;
cin>>i;
if (i==1)
{
cout << endl << "Delete" << endl;
}
search.close();;
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.06.2017, 22:56
Надо считать весь файл куда-то (в массив структур, например) и перезаписать с нуля нужными данными.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 34
19.06.2017, 23:31  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Надо считать весь файл куда-то (в массив структур, например) и перезаписать с нуля нужными данными.
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
void Delete()
{
    ifstream  in ("CountryInfo.txt",  ios::in);
    ofstream out("CountryInfo.new", ios::out);
    char country [100], s[256];
    int i;
 
    cout<<"Enter Country: "<<endl; 
    cin >>country;
    i=0;
    while(!in.eof()) {
        in.getline(s,255);
        if (strcmp(s, country) == 0) break;
        out<<s<<endl;
        i++;
    }
    while(!in.eof()) {
        in.getline(s,255);
        out<<s<<endl;
    }
    out.close();
    in.close();
    remove("CountryInfo.txt");
    rename("CountryInfo.new","CountryInfo.txt");
}
Сделал так, только удаляет первое название, и не всю информацию.
Что исправить в этом коде?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.06.2017, 08:53
GraK, была куча примеров по считыванию этой структуры CountryInfo, и у тебя раз за разом всё скатывается к чему-то другому. Считывание всегда будет одинаковое, для любых целей. Что за char массивы? Речь была о массиве структур. А для него ещё размер надо указывать, который неизвестен. Поэтому либо vector, либо делать холостой проход по файлу для подсчёта стран.
В общем на чердак и учиться, учиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2017, 08:53
Помогаю со студенческими работами здесь

Удаление всей информации во всех листах Excel
Добрый день. Подскажите пожалуйста. Есть файл экселя в нем имеется 128 листов, в каждом листе таблица и рисунок. Возникает вопрос можно...

Бинарный поиск значения по ключу в текстовом файле
Написать функцию, реализующую бинарный поиск значения по ключу в текстовом файле. Аргументы: имя файла, значение ключа Результат: если...

MyDictionary: сортировка по ключу, поиск значения по ключу, поиск ключа по значению
Задан интерфейс ІMyDictionary. Его реализует класс MyDictionary, который позволяет определить коллекцию пар &quot;ключ-значение&quot;. ...

Реализовать редактирование, удаление, поиск по ключу, добавление записей
Помогите реализовать редактирование, удаление, поиск по ключу, добавление записей в этой программе. program pr; const Csize = 100;...

Поиск в текстовом файле и вывод всей строки
Здравствуйте, имеется форма с 2 текстбоксами и кнопкой, также имеется текстовый файл с записями вида. 678987,Петров Дмитрий,пошёл,завод ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru