Write structure into file : Structure Serialization « Structure « C / ANSI-C

C / ANSI-C
1. assert.h
2. Console
3. ctype.h
4. Data Structure Algorithm
5. Data Type
6. Development
7. File
8. Function
9. Language Basics
10. Macro Preprocessor
11. Math
12. math.h
13. Memory
14. Pointer
15. setjmp.h
16. signal.h
17. Small Application
18. stdio.h
19. stdlib.h
20. String
21. string.h
22. Structure
23. time.h
24. wctype.h
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
C / ANSI-C » Structure » Structure SerializationScreenshots 
Write structure into file

/*
C & Data Structures

Published in Feb 2004 by CHARLES RIVER MEDIA

Author: P. S. Deshpande, O. G. Kakde
SKU: 1584503386

ISBN: 1584503386
*/ 
  

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 50


typedef struct {
    char  name[10];
    int key;
file_record;

/* this function adds the relatiuve addres to the index for a key */
void create_index(long index[]int key, long rel_add ) {
    index[key= rel_add;
}

/* this function writes a record to the file */
void write_rec(FILE *fp, file_record rec) {
   fwrite(&rec,sizeof(rec),1,fp);
}

void main() {
    long rel_add;
    int key;
    file_record frec;
    long index[MAX];/* an index list*/
    int n,i;

    FILE *recfile=NULL,*ifile=NULL;
    /* this initializes the index list to all ? */
    for(i=0; i< MAX; i++)
        index[i](-1);

    recfile=fopen("mfile","w");
    if(recfile == NULL) {
        printf("Error in openeing file mfile\n");
        exit(0);
    }
    rel_add = ;
    do {
        printf(" Enter the data vlue and the key of the record to be added to file mfile\n");
        scanf("%s %d",frec.name,&frec.key);
        while(index[frec.key!= (-1)) {
            printf(" A record with this key value already exist in a file enter record key value\n");
            scanf("%s %d",frec.name,&frec.key);
        }
        create_index(index,frec.key,rel_add);
         write_rec(recfile,frec);
        rel_add =  ftell(recfile)
        /* this sets the relative address for the next record to be 
      the value of current file position pointer in bytes from 
      the beginning of the file */
         printf("Enter 1 to continue adding records to the file\n");
         scanf("%d",&n);
    }while(n == 1);
   
    ifile=fopen("index_file","w");
         
    if(ifile == NULL) {
       printf("Error in openeing file index_file\n");
         exit(0);
    }
    
    fwrite(index,sizeof(index),1,ifile);/*writes the complete index into the index_file */
    fclose(recfile);
    fclose(ifile);
    printf("Enter 1 if you want to retrieve a record\n");
    scanf("%d",&n);
    
    ifn == 1) {
       ifile=fopen("index_file","r");
       if(ifile == NULL) {
           printf("Error in openeing file index_file\n");
           exit(0);
       }
       fread(index,sizeof(index),1,ifile);
       
       /* reads the complete index into the index list from the index_file*/
       fclose(ifile);
       recfile=fopen("mfile","r");
       
       if(recfile == NULL) {
           printf("Error in openeing file mfile\n");
           exit(0);
       }
    }
    printf("THE CONTENTS OF FILE IS \n");
    
    while( (fread(&frec,sizeof(frec),1,recfile)) != 0)
         printf("%s %d\n",frec.name,frec.key);
    
    do {
        printf("Enter the key of the record to be retrieved\n");
        scanf("%d",&key);
        rel_add = index[key]/*gets the relative address of the record from index list */
        if( (fseek(recfile,rel_add,SEEK_SET))!= 0) {
             printf("Error\n");
             exit(0);
        }
        fread(&frec,sizeof(frec),1,recfile);
        printf("The data value of the retrieved record is %s\n",frec.name);
        printf("Enter 1 if you want to retrieve a record\n");
        scanf("%d",&n);
    while(n == 1);
    
    fclose(recfile);
}


           
       
Related examples in the same category
1. scan a file and print out a list of words in ASCII order
www__.ja_v_a___2__s._co_m__ | Contact Us
Copyright 2003 - 08 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.