| | |
Sorting from a file
Please support our C advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Mar 2006
Posts: 7
Reputation:
Solved Threads: 0
Hello..
I've a question. Let say i've this in my txt type file with id field, name field, address field and deposit field :-
1 Jessica Simpson United Kingdom 5687.900000
37 Jennifer Anniston United States 7659.000000
4 Brad Pitt United States 87549.000000
9 Mike Shinoda United States 999865.000000
How can i sort all the user in my text file base on their id
and display a sorted list?
Is this possible to do in C?
Thank you..
I've a question. Let say i've this in my txt type file with id field, name field, address field and deposit field :-
1 Jessica Simpson United Kingdom 5687.900000
37 Jennifer Anniston United States 7659.000000
4 Brad Pitt United States 87549.000000
9 Mike Shinoda United States 999865.000000
How can i sort all the user in my text file base on their id
and display a sorted list?
Is this possible to do in C?
Thank you..
>How can i sort all the user in my text file base on their id
The id is the first number on each line, so extracting it with sscanf is trivial. Do you know anything about sorting? Your question is extremely vague in terms of what you're capable of. I wouldn't want to give you an advanced solution if you don't even know bubble sort.
>Is this possible to do in C?
Why does everyone ask this? There are only a handful of (very low level) things that C can't do, and that's only because the machine simply doesn't allow it.
The id is the first number on each line, so extracting it with sscanf is trivial. Do you know anything about sorting? Your question is extremely vague in terms of what you're capable of. I wouldn't want to give you an advanced solution if you don't even know bubble sort.

>Is this possible to do in C?
Why does everyone ask this? There are only a handful of (very low level) things that C can't do, and that's only because the machine simply doesn't allow it.
New members chased away this month: 5
•
•
Join Date: Mar 2006
Posts: 7
Reputation:
Solved Threads: 0
This basically what i've done so far.. For the display client list, i need to sort all the user base on their id. I cant figure it out so far how to do it. Kinda hard for me..
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int cid;
char name[40];
char address[80];
double deposit;
}client;
typedef struct
{
char line[300];
}data;
typedef struct
{
int cid;
}finds;
typedef struct
{
double money;
}deposit;
void menu();
int calculateMax(void);
void addClient();
void find();
void display();
void total();
void main()
{
menu();
}
void menu()
{
int selection;
printf("%s", "Program menu :\n");
printf("%s", "1. Add a new client\n");
printf("%s", "2. Find/retrieve information for a particular client\n");
printf("%s", "3. Display client list\n");
printf("%s", "4. Display the total amount of clients' deposit\n");
printf("%s", "5. Find a client that has the lowest and the highest deposit\n");
printf("%s", "6. Quit\n");
printf("%s", "Selection : ");
scanf("%d", &selection);
if(selection == 1)
{
addClient();
}
else if(selection == 2)
{
find();
}
else if(selection == 3)
{
display();
}
else if(selection == 4)
{
total();
}
else if(selection == 5)
{
}
else if(selection == 6)
{
}
else {
printf("%s", "\n\aError, please key in correct input!\n\n");
menu();
}
}
void addClient()
{
int max, i;
FILE *f, *id, *name, *address, *deposit;
printf("%s", "\n\nADD CLIENT\n");
printf("%s", "How many client you would like to add : ");
scanf("%d", &max);
client *client_info;
client_info = (client *) malloc(max * sizeof(client)); /*Allocate Memory For Client's Info*/
if(client_info == NULL)
{
printf("Unable to allocate space for client\n\n");
exit (EXIT_FAILURE);
}
if ((id = fopen("id.txt", "a+")) == NULL) /*Open file id.txt*/
{
printf("Error, the file cannot be opened\n");
}
if ((name = fopen("name.txt", "a+")) == NULL) /*Open file name.txt*/
{
printf("Error, the file cannot be opened\n");
}
if ((address = fopen("address.txt", "a+")) == NULL) /*Open file address.txt*/
{
printf("Error, the file cannot be opened\n");
}
if ((deposit = fopen("deposit.txt", "a+")) == NULL) /*Open file deposit.txt*/
{
printf("Error, the file cannot be opened\n");
}
if ((f = fopen("clients.txt", "a+")) == NULL) /*Open file clients.txt*/
{
printf("Error, the file cannot be opened\n");
}
else {
for (i = 0; i < max ; i++) { /*Get the input data*/
printf("\nClient %d\n", i + 1);
printf("%s", "Client's Id : ");
scanf("%d", &client_info[i].cid);
printf("%s", "Client's Name : ");
fflush(stdin);
gets(client_info[i].name);
printf("%s", "Client's Address : ");
fflush(stdin);
gets(client_info[i].address);
printf("%s", "Client's Deposit : ");
scanf("%lf", &client_info[i].deposit);
printf("\n");
}
}
for(i = 0; i < max; i++) { /*Store input data into files*/
fprintf(id, "%d\n", client_info[i].cid);
fputs(client_info[i].name, name);
fprintf(name, "\n");
fputs(client_info[i].address, address);
fprintf(address, "\n");
fprintf(deposit, "%lf\n", client_info[i].deposit);
}
for(i = 0; i < max; i++) {
fprintf(f, "%d", client_info[i].cid, "");
fprintf(f, "%3s", "");
fputs(client_info[i].name, f);
fprintf(f, "%5s", "");
fputs(client_info[i].address, f);
fprintf(f, "%7s", "");
fprintf(f, "%lf\n", client_info[i].deposit);
}
fclose(f);
fclose(id);
fclose(name);
fclose(address);
fclose(deposit);
free(client_info);
client_info = NULL;
printf("\n");
menu();
}
void find()
{
int find_id = 0, i = 0, client_cid, n = 0, max, selection;
FILE *id, *f;
max = calculateMax();
finds *result;
result = (finds *) malloc(max * sizeof(finds));
if(result == NULL)
{
printf("Unable to allocate space for client\n\n");
exit (EXIT_FAILURE);
}
if ((id = fopen("id.txt", "r")) == NULL)
{
printf("Error, the file cannot be opened\n");
}
else {
while (!feof(id)) { /*Get all clients' id number and store to array*/
fscanf(id, "%d", &result[i].cid);
i++;
}
}
fclose(id);
printf("%s", "\n\nFIND CLIENT\n");
printf("%s", "Key in client's id : "); /*Get the client's id that user want to query*/
scanf("%d", &client_cid);
data *clients_info;
clients_info = (data *) malloc(max * sizeof(data));
if(clients_info == NULL)
{
printf("Unable to allocate space for client\n\n");
exit (EXIT_FAILURE);
}
if ((f = fopen("clients.txt", "r")) == NULL)
{
printf("Error, the file cannot be opened\n");
}
i = 0;
while (!feof(f)) { /*Get all the clients' data from clients.txt and stored to array*/
fflush(stdin);
fgets(clients_info[i].line, 300, f);
i++;
}
fclose (f);
for(i = 0; i < max + 1; i++)
{
if(client_cid == result[i].cid)
{
printf("\n\n%s%6s%20s%17s\n", "ID", "NAME", "ADDRESS", "DEPOSIT");
puts(clients_info[i].line);
free(clients_info);
clients_info = NULL;
free(result);
result = NULL;
printf("Would you like to find another client?\nKey in 1 for yes or 2 to go to menu : ");
scanf("%d",&selection);
if(selection == 1) {
find();
}
else if(selection == 2) {
menu();
}
break;
}
else if(i == max)
{
printf("\nSory, there's no client with that id in our database.\n");
free(clients_info);
clients_info = NULL;
free(result);
result = NULL;
printf("Would you like to find another client?\nKey in 1 for yes or 2 to go to menu : ");
scanf("%d",&selection);
if(selection == 1) {
find();
}
else if(selection == 2) {
printf("\n\n");
menu();
}
}
}
}
void display()
{
int max = 0, i;
FILE *f;
printf("\n\nDISPLAY CLIENTS");
max = calculateMax();
data *clients_info;
clients_info = (data *) malloc(max * sizeof(data));
if(clients_info == NULL)
{
printf("Unable to allocate space for client\n\n");
exit (EXIT_FAILURE);
}
if ((f = fopen("clients.txt", "r")) == NULL)
{
printf("Error, the file cannot be opened\n");
}
i = 0;
while (!feof(f)) {
fflush(stdin);
fgets(clients_info[i].line, 200, f);
i++;
}
fclose (f);
printf("\n\n%s%6s%20s%17s\n", "ID", "NAME", "ADDRESS", "DEPOSIT");
for(i = 0; i < max; i++)
{
puts(clients_info[i].line);
}
free(clients_info);
clients_info = NULL;
}
void total()
{
int find_id = 0, max = 0, i = 0;
double total = 0;
FILE *deposits;
max = calculateMax();
deposit *result;
result = (deposit *) malloc(max * sizeof(deposit));
if(result == NULL)
{
printf("Unable to allocate space for client\n\n");
exit (EXIT_FAILURE);
}
if ((deposits = fopen("deposit.txt", "r")) == NULL)
{
printf("Error, the file cannot be opened\n");
}
else {
while (!feof(deposits)) { /*Get all clients' id number and store to array*/
fscanf(deposits, "%lf", &result[i].money);
i++;
}
}
fclose(deposits);
for(i = 0; i < max; i++)
{
total += result[i].money;
}
printf("\n\nTOTAL OF CLIENTS' DEPOSIT\n\n");
printf("Total Deposit is RM%.2lf\n\n\n", total);
menu();
}
int calculateMax(void)
{
char str[150];
int maximum = 0;
FILE *f;
if ((f = fopen("clients.txt", "r")) == NULL)
{
printf("Error, the file cannot be opened\n");
}
else {
while (!feof(f)) {
maximum++;
fgets (str , 200 , f);
}
}
fclose (f);
maximum = maximum - 1;
return maximum;
}•
•
Join Date: Mar 2006
Posts: 7
Reputation:
Solved Threads: 0
•
•
•
•
Originally Posted by Narue
>How can i sort all the user in my text file base on their id
The id is the first number on each line, so extracting it with sscanf is trivial. Do you know anything about sorting? Your question is extremely vague in terms of what you're capable of. I wouldn't want to give you an advanced solution if you don't even know bubble sort.
>But my problem is i dont how to extract the id field for each user and then sort them.
Okay, you know how to sort, so what's wrong with using sscanf to extract the id field? Then it's a simple matter of sorting keyed on the id member of an array of structure objects.
>After that display an ascending order of list of the user base on their id.
Well duh. After you sort then the array will be in order, so all you do is print everything in the array. It strikes me that you're making this problem way more complicated than it really is.
Okay, you know how to sort, so what's wrong with using sscanf to extract the id field? Then it's a simple matter of sorting keyed on the id member of an array of structure objects.
>After that display an ascending order of list of the user base on their id.
Well duh. After you sort then the array will be in order, so all you do is print everything in the array. It strikes me that you're making this problem way more complicated than it really is.
New members chased away this month: 5
![]() |
Similar Threads
- disk defragment error (Windows NT / 2000 / XP)
- sorting a text file (C++)
- where am i going wrong!!sort & crit count (C)
- I need help on STRUCTURES and on input file (C)
Other Threads in the C Forum
- Previous Thread: Using HID Input
- Next Thread: Extracting a field in a txt file
Views: 2175 | Replies: 5
| Thread Tools | Search this Thread |
Tag cloud for C
adobe ansi api array arrays asterisks binarysearch calculate centimeter char command convert copyimagefile copypdffile cprogramme creafecopyofanytypeoffileinc createcopyoffile csyntax directory dynamic executable fflush file fork forloop frequency getlasterror givemetehcodez graphics gtkgcurlcompiling hacking hardware highest homework i/o inches incrementoperators infiniteloop kernel km lazy linked linkedlist linux linuxsegmentationfault list lists locate logical_drives match matrix microsoft motherboard multi mysql number open opendocumentformat opensource owf pattern pdf performance pointer pointers posix problem probleminc program programming radix recursion recv repetition research scanf scheduling scripting segmentationfault send sequential shape socketprograming spoonfeeding stack standard string strings structures student systemcall testautomation turboc unix user variable voidmain() wab win32 windows.h






