954,496 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Read from a csv file

hi, i didn't get any reply probably coz ya didn't understand what i mean !
alright i'll make it simple.
i have a file in excel and i have to read from this file
here is the contents of this file
[TEX]
2,joined,2929828,429.6,2
4,toytoy,2929299,122.8,19
3,front shift,2299229,205,22
3,shift,1111111,222,20
...
...
...
[/TEX]
I wrote this code

#include"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
usingnamespace std;
typedefstruct sales 
{ 
int number;
char item[50]; 
char partnum[15];
float cost; 
char day[6];
};
sales rSales[197];
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
fp=fopen("cust.csv","r");
char bufferCustNum[40];
char bufferCost[40];
for (int i=0; i<197; i++)
{
fgets(bufferCustNum,3,fp);
rSales[i].number=atol(bufferCustNum);
fgets(rSales[i].item,sizeof(rSales[i].item),fp);
fgets(rSales[i].part_number,sizeof(rSales[i].partnum,fp);
fgets(bufferCost,6,fp);
rSales[i].cost=atof(bufferCost);
fgets(rSales[i].day,sizeof(rSales[i].day),fp);
}
for (int j=0; j<10; j++)
{
printf("number: %i\n", rSales[j].number);
printf("Item : %s\n",rSales[j].item);
printf("partnum: %s\n",rSales[j].partnum);
printf("bufferCost: %f\n",rSales[j].cost);
printf("day: %s\n\n",rSales[j].day);
}
system("pause");
return 0;
}


all what i'm trying to do is to store each part of the stream in the specific array and display it !
but the problem is that i'm still getting the ',' between the characters...
does any one know how to remove it without changing the struct ?!
or any idea how to write a while loop to read each character untill it reaches the comma and store it ?!
example: 2,joined,2929828,429.6,2
first it read the 2 and store it in rSales[i].number without storing the ',' and keep going untill it reach the end of the line !
i know how to write the pseudo but i dont know how to implement in the real code !
i'll appreciate any Help:?:
thanks

rowly
Junior Poster in Training
65 posts since Sep 2006
Reputation Points: 10
Solved Threads: 3
 

>> i didn't get any reply
I don't recall seeing another post -- did I miss it?

1. is that a C or a C++ program? You include both stdio.h and iostream, yet you use C file i/o functions. Make up your mind which kind of program you want and stick to it.

2. the code does not even compile cleanly. before attempting to answer your question you need to fix all the compile errors, then repost the code.

3. next time please use proper indentation -- the code is terrible to read as it is now. I hope you don't write all your programs like that.

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

:) heheh
wel it was only a scratch i'm trying to do a totally different program...
and its C.

#include"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedefstruct sales 
{ 
int customer_number;
char item[50]; 
char part_number[15];
float cost; 
char date[6];
};
sales rSales[197];
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
fp=fopen("sales.csv","r");
char bufferCustNum[40];
char bufferCost[40];
for (int i=0; i<197; i++)
{
fgets(bufferCustNum,3,fp);
rSales[i].customer_number=atol(bufferCustNum);
fgets(rSales[i].item,sizeof(rSales[i].item),fp);
fgets(rSales[i].part_number,sizeof(rSales[i].part_number),fp);
fgets(bufferCost,6,fp);
rSales[i].cost=atof(bufferCost);
fgets(rSales[i].date,sizeof(rSales[i].date),fp);
}
for (int j=0; j<10; j++)
{
printf("customer number : %i\n", rSales[j].customer_number);
printf("Item : %s\n",rSales[j].item);
printf("Part Number : %s\n",rSales[j].part_number);
printf("Cost: %i\n",rSales[j].cost);
printf("Date: %s\n\n",rSales[j].date);
}
return 0;
}

thx mate !

rowly
Junior Poster in Training
65 posts since Sep 2006
Reputation Points: 10
Solved Threads: 3
 

you can use strtok() to extract the individual fields.

while( fgets(buf,sizeof(buf),fp) != NULL)
	{
		rSales[i].number = atoi(strtok(buf,","));
		strcpy(rSales[i].item, strtok(NULL,","));
		strcpy(rSales[i].partnum, strtok(NULL,","));
		rSales[i].cost = (float)atof(strtok(NULL,","));
		strcpy(rSales[i].day, strtok(NULL,","));
		++i;

	}


[edit] you might want to read Dave's links from this post [/edit]

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

aw thats beautifull !!!
cheers mate i'll work on strtok() !!! better know how it works :)

rowly
Junior Poster in Training
65 posts since Sep 2006
Reputation Points: 10
Solved Threads: 3
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You