![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.03.2011
Сообщений: 15
|
![]()
Здравствуйте! Помогите пожалуйста решить проблему. Нужно осуществить перенос строковой информации (только символов) из двоичного файла в текстовый файл.
Суть программы: Дана упорядоченная таблица которая состоит из ключа, версии и строки символов. Сама таблица хранится в основной памяти, а информация в двоичном файле. Таблица выглядит так: 5: 0 jgfdjfdhgdfh, 1 kjfghfdjhjfd, 2 fjhgfjhgjfdhgjfd; 6: 5 kjfkdfjkd, 23 hgfdjhgdjfh, 35 fjghfdjhgfdj; 7: 4 jdfhdjhg, 5 fkgjfdhgjfh, 8 jfdghfgfdgfh После отображается меню: 1) добавить 2) удалить 3) очистить 4) вывести 5) переместить// данный пункт нужно будет добавить 6)выход Выберите пункт: 5 "Enter" Введите имя файла: тест "Enter" Перемещение завершено Вывод содержимого текстового файла на экран: jgfdjfdhgdfh, kjfghfdjhjfd, fjhgfjhgjfdhgjf kjfkdfjkd, hgfdjhgdjfh, fjghfdjhgfdj; jdfhdjhg, fkgjfdhgjfh, jfdghfgfdgfh После переноса строки должны располагаться в том же порядке в котором и были отображены в таблице. Код программы: int Menu () //вывод меню { int c; cout << "1. Add new record.\n2.Delete record.\n3.Clear table.\n4.Print table.\n5.Exit.\n"; cout << "Enter menu item: "; cin >> c; while (c<=0 || c>5) { cout << "Uncorrect! Reenter: "; cin >> c; } return c; } void Add1 () //пункт 1 { int key, rel; char str [50]; cout << "\nEnter key, release and string:\n"; cin >> key; cin >> rel; cin >> str; if (AddNewSorted (key, rel, str)) { cout << "\nSuccess. Press any key to continue."; _getch (); } else { cout << "\nFailure. Not enougth memory. Press any key to continue."; _getch(); } } void Delete2 () //пункт 2 { int key, rel; cout << "\nEnter key and release:\n"; cin >> key; cin >> rel; if (delByKeyAndRel (key, rel)) { cout << "\nSuccess. Press any key to continue."; _getch (); } else { cout << "\nFailure. No such record. Press any key to continue."; _getch(); } } void Clear3 () //пункт 3 { Clear (); cout << "\nSuccess. Press any key to continue."; _getch (); } void Print4 () //пункт 4 { Print (); cout << "\nPress any key to continue."; _getch (); } int _tmain(int argc, _TCHAR* argv[]) { factsz = 0; //фактическое число элементов в таблице = 0 bool b = true; //флаг выхода cout << "Input file name: "; cin >> filename; while (b) { system ("cls"); //очистка экрана int c = Menu (); //вывод меню switch (c) { //обработка выбора case 1: Add1(); break; case 2: Delete2(); break; case 3: Clear3(); break; case 4: Print4(); break; case 5: b = false; break; } } Clear (); //очистка памяти DeleteFile (filename); return 0; } //////////////////////////////////// Это функции которые нужно исправить для работы с текстовым файлом, а также дописать функцию в которой: 1.Запрос на ввод имени файла и соответственно сам ввод имени; 2.Вызов функции которая будет осуществлять перенос строковой информации; 3. Вывод на экран содержимого текстового файла. void Import() { FILE *f,*f1; char* buf; f=fopen(filename, "rb"); f1=fopen(filename1, "w+"); /*if((f=fopen(filename,"rb")==NULL)) { fpirntf(f,"Can't read to file\n",filename) exit(EXIT_FAILURE); }*/ /*if((f1=fopen(filename1,"w+")==NULL ) ) { fprintf(f1,"Can't write to file\n",filename1) exit(EXIT_FAILURE); }*/ while(!feof(f)) fread(buf,1,len,f); fputs(buf,f1); fclose(f); fclose(f1); } int SaveToFileTxt (long& offset, char* info) //сохранение в файл строковой информации { FILE* f1 = fopen (filename1, "w+"); //открываем для добавления в конец if (f1==NULL) return 0; fseek (f1, 0, SEEK_END); //ставим указатель в файле на его конец offset = ftell(f1); //сохраняем текущее смещение int l = strlen(info); if (l!=fwrite (info, 1, l, f1)) {fclose (ft); return 0; } else { fclose (f1); return 1;} } char* ReadFromFileTxt (char* buf, long ofs, int len, FILE* f1) //чтение из файла в буфер с заданным смещением, возвращает указатель на тот же буфер для удобства { if (f1==NULL) return 0; if (fseek (f1, ofs, SEEK_SET)) return 0; //смещаемся на нужное место fread (buf, 1, len, f1); //читаем заданное число байт buf[len] = '\0'; return buf; } void Print (Item* sp) //вывод списка на экран { FILE* f1 = fopen (filename1, "rt"); Item* tmp = sp; char* buf; while (tmp!=NULL) { buf = new char [tmp->len+1]; cout << tmp->release << " " << ReadFromFile(buf, tmp->ofs, tmp->len, f) << "; "; tmp = tmp->next; delete [] buf; } fclose (f1); } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа на C++(работа с двоичным файлом)) | JinAnton | Помощь студентам | 31 | 13.01.2011 22:37 |
Работа с текстовым файлом | rem2010 | Помощь студентам | 1 | 27.04.2010 06:54 |
Работа с текстовым файлом | Mashul'ka | Помощь студентам | 1 | 03.06.2009 23:26 |
работа с текстовым файлом | Cеверина | Помощь студентам | 4 | 30.03.2009 12:20 |
Работа с двоичным кодом | lacost | Общие вопросы Delphi | 7 | 19.11.2008 10:38 |