Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 13:53   #1
Madara88
Пользователь
 
Регистрация: 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);
}

fread(buf,1,len,f);
//fseek(f1,0,SEEK_END);
//offset=ftell(f1);
fputs(buf,f1);
fclose(f);
fclose(f1);
return 0;
}


char* 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);
}
Madara88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами. Константинн Помощь студентам 0 06.03.2011 12:50
Работа с двоичными файлами Kathrine Общие вопросы C/C++ 0 12.02.2011 21:31
Работа с текстовыми файлами galka_kiss Фриланс 18 24.02.2010 22:00
работа с текстовыми файлами Bayazet Общие вопросы Delphi 10 09.12.2008 18:39
Работа с Текстовыми файлами wwww Общие вопросы Delphi 5 29.10.2007 11:17