Problem while splitting the line using a delimiter and pushing itinto an array

P

Prasanth

I have file named as "test.txt". The contents of the file are as
follows :

item1,sal,1000
item2,sal,2000

I am trying to read the file. And spilt each line as per delimiter ","
and push it into an array. That is

array[0][0] = item1
array[0][1] = sal
array[0][2] = 1000
array[1][0] = item2
array[1][1] = sal
array[1][2] = 2000

Please help me out over here

The program which i have written is below:

#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <process.h>

int main()
{
clrscr();
ifstream inf;
char line[80];
char a[10][10];
inf.open("c:\\test.txt");

{
int j=0;
int w=0;
int i;
while(!inf.eof())
{
cout << line;
for(i=0;i<80;i++,j++)
{
cout << line << endl;
a[w][j] = line;
if(line == ' ')
w++;
}
}
}
cout << a[1];
inf.close();
getch();
return 0;
}

Please help me out as soon as possible.

Thanks,
Prasanth
 
R

red floyd

Prasanth said:
I have file named as "test.txt". The contents of the file are as
follows :

item1,sal,1000
item2,sal,2000

I am trying to read the file. And spilt each line as per delimiter ","
and push it into an array. That is

array[0][0] = item1
array[0][1] = sal
array[0][2] = 1000
array[1][0] = item2
array[1][1] = sal
array[1][2] = 2000

Please help me out over here

The program which i have written is below:

#include <iostream.h> Non-standard header.
#include <string.h>
#include <conio.h> Non-standard header.
#include <fstream.h> Non-standard header.
#include <process.h>
Non-standard header.
int main()
{
clrscr();
ifstream inf;
char line[80];
char a[10][10];
prefer std::vector to arrays.
inf.open("c:\\test.txt");

{
int j=0;
int w=0;
int i;
while(!inf.eof())
This does not do what you think it does. See FAQ 15.5
(http://parashift.com/c++-faq-lite/input-output.html#faq-15.5)
{
cout << line;
Where do you ever get data into line?
for(i=0;i<80;i++,j++)
{
cout << line << endl;
a[w][j] = line;
if(line == ' ')
w++;
}
}
}
cout << a[1];
inf.close();
getch(); unneeded.
return 0;
}

Please help me out as soon as possible.

Thanks,
Prasanth
 
L

Lionel B

I have file named as "test.txt". The contents of the file are as follows
:

item1,sal,1000
item2,sal,2000

I am trying to read the file. And spilt each line as per delimiter ","
and push it into an array. That is

array[0][0] = item1
array[0][1] = sal
array[0][2] = 1000
array[1][0] = item2
array[1][1] = sal
array[1][2] = 2000

Please help me out over here

The program which i have written is below:


Phew, there are so many things wrong with this I don't know where to begin

Firstly, if you're to program in C++, better to use the C++ (as opposed to
C) headers: they're called things like <iostream>, <fstream>, etc.
(no .h). The difference is that they put all functionality in "namespace
std" (read up about namespaces).
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <process.h>

int main()
{
clrscr();
ifstream inf;
char line[80];
char a[10][10];

Usually a bad idea to use arrays, particularly with arbitrary sizes (and
no error checking in your code). Those are all buffer overflows waiting to
happen.
inf.open("c:\\test.txt");

{

Why the extra nested block here?
int j=0;
int w=0;
int i;

In C++ it's generally viewed as good style to declare variables just
before you use them.
while(!inf.eof())

This doesn't do what you think it does... anyway, this is not the best way
to read lines of text (see below)
{
cout << line;

Um... you've not actually *read* the line from the file"!
for(i=0;i<80;i++,j++)

Note that "i" here is not the same "i" you declared above (but j is).
{
cout << line << endl;
a[w][j] = line;
if(line == ' ')
w++;
}
Yikes.

}
}
cout << a[1];
inf.close();
getch();
return 0;
}

Please help me out as soon as possible.


This looks a lot like homework... if it is, the code below should fail
you, as there's no way it could be your own work ;-)

Read up in particular about the std::string class and std::vector template
class. They're probably the most useful things you'll ever use in C++.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

// all standard library stuff is in namespace std
// Don't use this in a header file, though.
using namespace std;

int main()
{
ifstream inf("test.txt");
if (!inf) {
cerr << "Failed to open file\n";
return 1;
}

// read about std::vector
vector< vector<string> > a;

// read about std::string
string line;

// This loop works, because getline() returns false (sort of)
// when there is nothing more to read.

while (getline(inf,line)) {

cout << "line = \"" << line << "\"\n";

a.push_back(vector<string>());

// We use find() to find the delimiters and
// substr() to yank out the text
string::size_type pos1 = 0;
string::size_type pos2 = line.find(',');
while (pos2 != string::npos) {
a.back().push_back(line.substr(pos1,pos2-pos1));
pos1 = pos2+1;
pos2 = line.find(',',pos1);
}
a.back().push_back(line.substr(pos1,pos2-pos1));
}

// Now eof should be set
if (!inf.eof()) {
cerr << "Something went wrong reading file\n";
return 1;
}
inf.close();

for (size_t i=0;i<a.size();++i) {
cout << '\n';
for (size_t j=0;j<a.size();++j) {
cout << "a[" << i << "][" << j << "] = \"" << a[j] << "\"\n";
}
}

return 0;
}
 
P

Prasanth

Thanks for the advices will try to re-check up the code and come back
to you people in case of the further quires

Thanks,
Prasanth
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top