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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.90
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
#1

Запись/Удаление строки из файла - C++

17.09.2009, 17:08. Просмотров 5020. Ответов 17
Метки нет (Все метки)

Помогите с записью строки в файл, вообще если что задание написать "Телефонный справочник" в каждой строке которого должно быть две позиции Familie и Number. Может у меня структура написана не правильно или сама функция записи строки, не знаю. удаление пока не рассматривал, мне бы с этим разобраться.
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
const dl=100;
int klts,kol=0;
FILE*i,*u;
char dstv=0,dstv2=0;
struct TelSPRAV{
char Familie[20];
char Number[15];
       }TelSPRAV,*vvod;
char find[15];
char str[dl];
cout<<"Dobavit' zapis'"<<endl;
                if((i=fopen("H:\\My documents\\u1.txt","t"))==0){
            cout<<"File pust"<<endl;}
//по заданию это должно делать через второй файл и записываться в двоичном режиме
                if((u=fopen("H:\\My documents\\bfl.out","w+b"))==0){
                cout<<"Oshbka otkritie vihodnogo file";}
                cout<<"Vvedite familiu"<<endl;
                cin>>TelSPRAV.cout<<"Dobavit' zapis'"<<endl;
                if((i=fopen("H:\\My documents\\ÓÏÈ\\Programmirovanie\\Visual\\Works\\C++\\Modulnoe\\vvod vivod\\u1.txt","t"))==0){
            cout<<"File pust"<<endl;}
                if((u=fopen("H:\\My documents\\ÓÏÈ\\Programmirovanie\\Visual\\Works\\C++\\Modulnoe\\vvod vivod\\bfl.out","w+b"))==0){
                cout<<"Oshbka otkritie vihodnogo file";}
                cout<<"Vvedite familiu"<<endl;
                cin>>TelSPRAV.Familie;
                cout<<"Vvedite telefon"<<endl;
                cin>>TelSPRAV.Number;
                fputs(vvod,i);
                fclose(u);
                fclose(i);;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 17:19     Запись/Удаление строки из файла #2
на 18 строке слито 2 куска кода)
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
const dl=100;
int klts,kol=0;
FILE*i,*u;
char dstv=0,dstv2=0;
struct TelSPRAV
{
  char Familie[20];
  char Number[15];
}TelSPRAV,*vvod;
char find[15];
char str[dl];
 
                cout<<"Dobavit' zapis'"<<endl;
                if((i=fopen("H:\\My documents\\УПИ\\Programmirovanie\\Visual\\Works\\C++\\Modulnoe\\vvod vivod\\u1.txt","t"))==0){
                cout<<"File pust"<<endl;}
                if((u=fopen("H:\\My documents\\УПИ\\Programmirovanie\\Visual\\Works\\C++\\Modulnoe\\vvod vivod\\bfl.out","w+b"))==0){
                cout<<"Oshbka otkritie vihodnogo file";}
                cout<<"Vvedite familiu"<<endl;
                cin>>TelSPRAV.Familie;
                cout<<"Vvedite telefon"<<endl;
                cin>>TelSPRAV.Number;
                fputs(vvod,i); //а где собсна vvod наполняется?:)
                fclose(u);
                fclose(i);;
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 17:53  [ТС]     Запись/Удаление строки из файла #3
А как тогда сделать чтобы строка правильно наполнялась(фамилия номер) и записывалась в файл?
Цитата Сообщение от GAV_13 Посмотреть сообщение
fputs(vvod,i); //а где собсна vvod наполняется?
согласен здесь я че то не то сделал
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 18:51     Запись/Удаление строки из файла #4
мб так?
C++
1
2
ofstream out(FileName);
out << TelSPRAV.Familie << " " << TelSPRAV.Number << endl;
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:08  [ТС]     Запись/Удаление строки из файла #5
Nikituki не знаю вообще в учебнике я нашел fputs может с ней
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
17.09.2009, 19:13     Запись/Удаление строки из файла #6
Цитата Сообщение от crashc Посмотреть сообщение
в учебнике я нашел fputs может с ней
Определись с языком - С или С++
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:14  [ТС]     Запись/Удаление строки из файла #7
на c++ как написать?
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 19:16     Запись/Удаление строки из файла #8
Код, предложенный мной, не работает?
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:24  [ТС]     Запись/Удаление строки из файла #9
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 21:22     Запись/Удаление строки из файла #10
Цитата Сообщение от crashc Посмотреть сообщение
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
Ну, для С++ это стандартная функция Хотя, если препод принимает только то что он давал...
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
17.09.2009, 21:39     Запись/Удаление строки из файла #11
Небольшие исправления.
Берём за основу код, предложенный GAV_13,
Из объявления стрктуры убираем
C++
1
TelSPRAV,*
И получаем нормальную структурку vvod типа TelSPRAV
После этого из текста убираем TelSPRAV (структуры с таким именем нет), а пишем vvod.

Потом вместо вот этого
C++
1
fputs(vvod,i);
Пишем
C++
1
2
fputs(vvod.Familie,i); 
fputs(vvod.Number,i);
Ну, то есть в файл занесли фамилию и номер.
Одной строкой не занести, потому что между ними знак конца строки, щас не размышляю
над этим

Теперь ещё я посмотрел режим открытия файла, куда будем записывать, у меня в книги
такого режима нет ("t"), открываем с режимом "a" (Добавление в конец файла)

Дальше, я так и не понял, зачем нам ещё один файл? Работаем с одним, заносим в него
данные с консоли, открываем два, странно.
Пишем все заголовочные файлы.

Теперь вопрос автору: как сделать так, чтобы в файл все данные располагались в приемлемом
формате: построчно, в каждой строке фамилия и номер с пробелом между ними.
Это ты сам думай, как сделать
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 21:57     Запись/Удаление строки из файла #12
Цитата Сообщение от kravam Посмотреть сообщение
Берём за основу код, предложенный GAV_13,
я ничего не предлагал Я просто выкинул лишние выводы на экран
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 22:21     Запись/Удаление строки из файла #13
Цитата Сообщение от GAV_13 Посмотреть сообщение
если препод принимает только то что он давал...
Гнать нуно таких преподов.....
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
19.09.2009, 12:34  [ТС]     Запись/Удаление строки из файла #14
kravam смотри вот че у меня написано в учебнике:
"a" − для добавления информации в конец файла;
Режим открытия может также содержать символы "t" (текстовый режим) или "b" (двоичный режим)

Добавлено через 14 минут
kravam может сделать таким образом
C++
1
vvod.Familie[19]='\0';
а потом каким нибудь оператором можно продолжить запись в этой же строке?

Добавлено через 7 минут
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 326663A1. Read of address F87E4A68'. Process stopped. Use Step or Run to continue.

Цитата Сообщение от kravam Посмотреть сообщение
C++
1
2
fputs(vvod.Familie,i); 
fputs(vvod.Number,i);
в этих местах программа выдает эту ошибку
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
19.09.2009, 16:26     Запись/Удаление строки из файла #15
Цитата Сообщение от crashc Посмотреть сообщение
fputs(vvod.Familie,i);
fputs(vvod.Number,i);
Что такое i?
У fputs в качестве второго параметра файл, т.е. например,
C++
1
2
FILE*f;
fputs (str, f);
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
19.09.2009, 19:40  [ТС]     Запись/Удаление строки из файла #16
Всем спасибо большое за помощь но я написал несколько другим способом вот он
C++
1
2
3
4
5
6
7
8
9
10
if((i=fopen("u1.txt","at"))==0){
            cout<<"File pust"<<endl;
                }
                fseek(i,0,SEEK_END);
                cout<<"Vvedite familiu"<<endl;
                cin>>vvod.Familie;
                cout<<"Vvedite telefon"<<endl;
                cin>>vvod.Number;
                fwrite(&vvod,sizeof(TelSPRAV),1,i);
                fclose(i);
MotherBoard
Путешественница
1250 / 478 / 11
Регистрация: 22.02.2009
Сообщений: 2,843
19.09.2009, 20:11     Запись/Удаление строки из файла #17
Цитата Сообщение от crashc Посмотреть сообщение
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
Не всегда учителя дают всё! Другой раз дают как специально,не до конца... Чтобы вы сами что-нибудь придумали....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2009, 02:41     Запись/Удаление строки из файла
Еще ссылки по теме:

C++ Удаление строки из файла по имени
Чтение текста из файла, удаление каждой второй строки (\n), запись в файл C++
C++ Удаление из файла строки
C++ Удаление последней строки из файла
C++ Удаление строки из файла

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
20.09.2009, 02:41     Запись/Удаление строки из файла #18
crashc, понятно всё. У меня в K&R такие режимы написаны, у тебя эдакие, Для того и форум, чтобы уточнять- и делать в памяти себе зарубки.

Насчёт твоей идеи- не разбирался, но с ходу если, понимаешь, когда ты объявляешь переменую типа TelSPRAV, у тебя вызывается так называемый конструктор, который обнуляет все поля этой переменной.

(В учебниках по С эта деталь почему-тообходится стороной. А в учебниках по С++ говорится, о вызове конструкторов для такой штуке как class и тут же говорится, что вообще-то class и struct это одно и тоже (понятно дело с оговорками!). Но оговорки эти вызова конструтора не касаются)

Так что после создания переменной vvod там будут одни ноли. Не мусор, а именно ноли. Обнулять что-то нет необходимости то есть.
Почему fputs не срабатывало 2 раза подряд, ума не приложу. Там разбираться надо было с i, которая, qwert, с самого начала темы фигурировала как
C++
1
FILE*
Yandex
Объявления
20.09.2009, 02:41     Запись/Удаление строки из файла
Ответ Создать тему
Опции темы

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