Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > [c++] файлы и стуктуры


Автор: Jater 21.12.2008, 19:41
Код
void IzTextVBinsFam(char *filename)//создание бинарного из текстового 1
{
    
    struct dannye a;
    char *stroka=new char[300];
    char t[50]="Иванова";
    char y[50]="Козлова";
    int j;
    char *ptr;
    FILE* in;
    FILE* out;
    if(!(in=fopen(filename,"rt")))          //открытие файла
    {
        printf("Open file failed\n");
        return;
    }
    if(!(out=fopen("binSFIOiNZachetki.bin","w+b")))
    {
        printf("Cannot create file\n");
        return;
    }
    fgets(stroka,300,in);              
    while(!(feof(in)))
    {
       ptr=strtok(stroka," ");
       j=0;
       while(*(ptr+j)!='\0')
       {
           a.fio.f[j]=*(ptr+j);                  //a.fio.f -фамилия студента
           j++;
       }
       if(a.fio.f[50]==t[50])
       {
           cout<<"Иванова вышла замуж и сменила фамилию: ";
           a.fio.f[50]=y[50];
       }
       a.fio.f[j]='\0';
       ptr=strtok(NULL," ");
       j=0;
       while(*(ptr+j)!='\0')
       {
           a.fio.i[j]=*(ptr+j);         //a.fio.i -имя студента
           j++;
       }
       a.fio.i[j]='\0';
       ptr=strtok(NULL," ");
       j=0;
       while(*(ptr+j)!='\0')
       {
           a.fio.o[j]=*(ptr+j);             //a.fio.о -отчество студента
           j++;
       }
       a.fio.o[j]='\0';
       ptr=strtok(NULL," ");
       a.Nzach=atol(ptr);                      //a.Nzach -номер зачетки

       fwrite(&a,sizeof(a),1,out);
       fgets(stroka,300,in);
    }
    rewind(out);
    fread(&a,sizeof(a),1,out);
    while(!feof(out))
    {
        
        printf("%-15s %-15s %-15s %10d\n",a.fio.f,a.fio.i,a.fio.o,a.Nzach);
        fread(&a,sizeof(a),1,out);
    }
    fclose(in);
    fclose(out);
};


кратко о том что делает функция:
есть текстовый файл с информацией о студентах 1.txt:
Иванин Владимир Георгиевич 456345
Петров Василий Николаевич 456348
Иванова Зинаида Петровна 456340
Петрова Наталья Александровна 456349

функЦия читает этот файл и делает из него бинарныЙ!!!!!
ПОМОГИТЕ ПОЖАЛУЙСТА СДЕЛАТЬ ТАК ,ЧТО БЫ ПРИ ЧТЕНИИ ФАЙЛА ФАМИЛИЯ ИВАНОВА  ЗАМЕНИЛАСЬ НА ФАМИЛИЮ КОЗЛОВА(т.е. Иванова сменила фамилию)


Автор: NewDima 21.12.2008, 20:00
используй
Код

strcmp

Цитата

Compares one string to another.
strcmp performs an unsigned comparison of s1 to s2, starting with the first character in each string and continuing with subsequent characters until the corresponding characters differ or until the end of the strings is reached.

И
Код

StrCopy

Цитата

Use StrCopy to copy a null-terminated string. StrCopy does not perform any length checking. The destination buffer must have room for at least StrLen(Source)+1 characters.

Автор: JackYF 21.12.2008, 22:19
Цитата(NewDima @  21.12.2008,  19:00 Найти цитируемый пост)
StrCopy

Нет такой функции. Есть функция strcpy.

Автор: KasMP 21.12.2008, 22:29
Цитата(JackYF @  21.12.2008,  22:19 Найти цитируемый пост)
Нет такой функции. Есть функция strcpy.

Неправда smile .
Strcopy тоже когда-то была, но со временем выяснилось, что она какая-то кривая. Но это "со временем" было довольно длительным и поэтому strcopy успели встроить во многие компиляторы и т.п..
И чтобы не было разных несуразных расхождений, новую правильную функцию назвали strcpy.

Вот smile smile .

Автор: bsa 22.12.2008, 00:25
Цитата(KasMP @ 21.12.2008,  22:29)
Strcopy тоже когда-то была, но со временем выяснилось, что она какая-то кривая.

Странно. Но вот гугль нашел ее упоминание только в контексте всяких бейсиков и паскалей с дельфями.
мой тебе совет - посмотри названия всех фукций, которые объявлены в string.h, ты найдешь одну очень интересную закономерность - почти все из них имеют название из 6 символов (исключение - memmove, strcoll, strerror и расширенные версии базовых функций).

Автор: Dmi3ev 22.12.2008, 01:22
KasMP,
Цитата

Цитата(JackYF @  21.12.2008,  22:19 Найти цитируемый пост)
Нет такой функции. Есть функция strcpy.

Неправда smile .


 А точно не путаете с Builder, там есть StrCopy... а вот про такую strcopy тоже не слышал...

Автор: NewDima 22.12.2008, 08:49
Код

extern PACKAGE char * __fastcall StrCopy(char * Dest, const char * Source);

Description

Use StrCopy to copy a null-terminated string. StrCopy does not perform any length checking. The destination buffer must have room for at least StrLen(Source)+1 characters.

For length checking, use the StrLCopy function.


Добавлено через 1 минуту и 56 секунд
да, стоит уточнить, bcb6

Добавлено через 3 минуты и 36 секунд
да, стоит уточнить, bcb6

Автор: NewDima 22.12.2008, 08:49
да, наотправлял smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)