24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
1

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

17.09.2009, 17:08. Показов 5761. Ответов 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);;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2009, 17:08
Ответы с готовыми решениями:

Чтение текста из файла, удаление каждой второй строки (\n), запись в файл
Дана строка у текстовом файле input.txt: Teachers TV's resources Have generated views Teachers...

Удаление строки из файла\либо удаление самого файла.
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE...

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод)
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в...

Удаление строки из файла
В общем у меня есть текстовый документ, в котором что-то записано таблицей. И мне надо удалить из...

17
81 / 81 / 6
Регистрация: 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);;
1
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 17:53  [ТС] 3
А как тогда сделать чтобы строка правильно наполнялась(фамилия номер) и записывалась в файл?
Цитата Сообщение от GAV_13 Посмотреть сообщение
fputs(vvod,i); //а где собсна vvod наполняется?
согласен здесь я че то не то сделал
0
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;
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:08  [ТС] 5
Nikituki не знаю вообще в учебнике я нашел fputs может с ней
0
Эксперт JavaЭксперт С++
8376 / 3598 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.09.2009, 19:13 6
Цитата Сообщение от crashc Посмотреть сообщение
в учебнике я нашел fputs может с ней
Определись с языком - С или С++
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:14  [ТС] 7
на c++ как написать?
0
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 19:16 8
Код, предложенный мной, не работает?
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
17.09.2009, 19:24  [ТС] 9
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
0
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 21:22 10
Цитата Сообщение от crashc Посмотреть сообщение
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
Ну, для С++ это стандартная функция Хотя, если препод принимает только то что он давал...
0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
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" (Добавление в конец файла)

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

Теперь вопрос автору: как сделать так, чтобы в файл все данные располагались в приемлемом
формате: построчно, в каждой строке фамилия и номер с пробелом между ними.
Это ты сам думай, как сделать
1
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 21:57 12
Цитата Сообщение от kravam Посмотреть сообщение
Берём за основу код, предложенный GAV_13,
я ничего не предлагал Я просто выкинул лишние выводы на экран
1
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 22:21 13
Цитата Сообщение от GAV_13 Посмотреть сообщение
если препод принимает только то что он давал...
Гнать нуно таких преподов.....
0
24 / 24 / 2
Регистрация: 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);
в этих местах программа выдает эту ошибку
0
145 / 145 / 32
Регистрация: 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);
1
24 / 24 / 2
Регистрация: 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);
0
Путешественница
1250 / 478 / 11
Регистрация: 22.02.2009
Сообщений: 2,842
19.09.2009, 20:11 17
Цитата Сообщение от crashc Посмотреть сообщение
понимаешь Nikituki мне надо чтобы записывалось стандартной функцией(т.е. как в учебнике учителя) а то что ты предложил он не давал
Не всегда учителя дают всё! Другой раз дают как специально,не до конца... Чтобы вы сами что-нибудь придумали....
0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
20.09.2009, 02:41 18
crashc, понятно всё. У меня в K&R такие режимы написаны, у тебя эдакие, Для того и форум, чтобы уточнять- и делать в памяти себе зарубки.

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

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

Так что после создания переменной vvod там будут одни ноли. Не мусор, а именно ноли. Обнулять что-то нет необходимости то есть.
Почему fputs не срабатывало 2 раза подряд, ума не приложу. Там разбираться надо было с i, которая, qwert, с самого начала темы фигурировала как
C++
1
FILE*
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2009, 02:41
Помогаю со студенческими работами здесь

Удаление строки файла
Подскажите как удалить строку из файла? я знаю что можно перезаписывать файл, удалить из первого...

Удаление строки из файла
Добрый день, возник вопрос возможно ли удалить/изменить в файле слово/строку, не перезаписывая при...

Удаление строки из файла
Здравствуйте! Подскажите пожалуйста, как реализовать функцию удаления нужной строки из файла....

Удаление из файла строки
Есть файл (computers.dat) куда записываются данные (структура) о компьютерах (тип, год, цена)....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru