Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include "lab-09.h"
typedef struct Student_data
{
char UIN[10];
char *name; /*12-24 with 24 max*/
char *username; /*max of 12 */
char *email; /*max of 30 */
char major[5];
char class[3];
struct Student_data *next;
} Student_data;
/*Setup the program to accept multiple arguments as input*/
int main (int argc, char *argv[])
{
int len=0, i=0, count=0, tempnum=0, cfg_lines=0, skip_lines, ss_result;
char *line_ptr, one_line[96], temp[100], line[100];
FILE *input; FILE *config; FILE *output;
if (4 != argc)
{
fputs ("Not enough arguments.\n", stderr);
return 1;
}
/*Open the config file and extract all needed data*/
config=fopen(argv[1], "r");
if(config==NULL)
{
fputs("Configuration was unable to be opened\n",stderr);
return 1;
}
else
{
fputs("Configuration was opened successfully\n",stderr);
}
/*Open the input and output files and prepare them for use with "r" and "w" respectively*/
input=fopen(argv[2], "r");
if(input==NULL)
{
fputs("Input file was unable to be opened\n",stderr);
return 1;
}
else
{
fputs("Input file was opened successfully\n",stderr);
}
output=fopen(argv[3], "w");
if(output==NULL)
{
fputs("Output file was unable to be opened\n",stderr);
return 1;
}
else
{
fputs("Output file was opened successfully\n",stderr);
}
line_ptr=fgets(one_line, 96, config);
sscanf(one_line, "%d", &cfg_lines);
int length[cfg_lines];
char tags[cfg_lines][80];
for(i=0; i<cfg_lines; i++)
{
line_ptr=fgets(one_line, 64, config);
ss_result = sscanf(one_line,"%d %s", &length[i], &tags[i]);
if (2 != ss_result)
{
fputs ("Problem with config file", stderr);
return 1;
}
}
line_ptr=fgets(one_line, 64, config);
ss_result = sscanf(one_line,"%d", &skip_lines);
if (1 != ss_result)
{
fputs ("Problem with config file", stderr);
return 1;
}
/*end configuration stuff and input/output operations*/
/**/
char input_buffer[122];
Student_data *head, *cur;
head = 0;
for (i=0; i<=skip_lines; i++)
{
line_ptr=fgets(one_line, 64, input);
}
for(i=0; 1; i++)
{
/*Read one line from input;*//**/
line_ptr=fgets(input_buffer, 122, input);
if(line_ptr==NULL) break;
cur = calloc (1, sizeof(student_data);
cur->name = calloc (lengths[1]+lengths[2]+1, sizeof(char));
cur->username = calloc(lengths[3] + 1), sizeof(char));
cur->email= calloc(lengths[4] + 1), sizeof(char));
/*use strstr to find all of the commas*//**/
char *last_name_comma = strstr (input_buffer, ",");
if (! last_name_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *first_name_comma = strstr (last_name_comma+1, ",");
if (! first_name_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *cs_account_comma = strstr (first_name_comma+1, ",");
if (! cs_account_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *cs_email_comma = strstr (cs_account_comma+1, ",");
if (! cs_email_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *major_name_comma = strstr (cs_email_comma+1, ",");
if (! major_name_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *class_comma = strstr (major_name_comma+1, ",");
if (! class_comma)
{
fputs (missing a field,stderr);
return 1;
}
char *new_line = strstr(class_comma + 1, '\n');
*last_name_comma = 0;
last_name_comma += 2;
*first_name_comma = 0;
first_name_comma += 2;
*cs_account_comma = 0;
cs_account_comma +=2;
*cs_email_comma = 0;
cs_email_comma += 2;
*major_name_comma = 0;
major_name_comma += 2;
*class_comma = 0;
class_comma += 2;
*new_line = 0;
strcpy (cur->UIN, last_name_comma);
cur->next = head;
head = cur;
strcpy (cur->name, first_name_comma);
cur->next = head;
head = cur;
strcpy (cur->username, cs_account_comma);
cur->next = head;
head = cur;
strcpy (cur->email, cs_email_comma);
cur->next = head;
head = cur;
strcpy (cur->major, major_name_comma);
cur->next = head;
head = cur;
strcpy (cur->class, class_comma);
cur->next = head;
head = cur;
strcpy (cur->next, new_line);
cur->next = head;
head = cur;
}
return 0;
}