number of words in a line

G

Gary Wessle

hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.

getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows

I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >> word) count++ will go through the whole file. I just want
one line.

thanks
 
G

Gary Wessle

Gary Wessle said:
hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.

getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows

I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >> word) count++ will go through the whole file. I just want
one line.

thanks

I tried
ifstream in(file_name.c_str());
string line = getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(inpput >> word)
nCol++;

did not do it
 
A

asoofi

Hi Gary
This is just a thought, but why don't you put a counter on every time a
space is found?

As long as you properly detect when to exit your loop, that should
suffice.
 
A

asoofi

***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.
 
G

Gary Wessle

***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.


thanks, I will try to convert it to c++ since I am learning that now,
and test it, but I understand the idea.
my solution was

****************
void No_of_Rows_Cols() {
ifstream in(file_name.c_str());
string line;
getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(input >> word)
nCol++;

nRows = 1;
while (getline(in, line))
nRows++;
}
****************
 
A

asoofi

Theoretically, all of C can be used in C++.

If you throw that into a cpp file, it should still work.

But glad it helped! If it doesnt let me know and I'll throw it into a
compiler and see what I can do.
Gary said:
***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.


thanks, I will try to convert it to c++ since I am learning that now,
and test it, but I understand the idea.
my solution was

****************
void No_of_Rows_Cols() {
ifstream in(file_name.c_str());
string line;
getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(input >> word)
nCol++;

nRows = 1;
while (getline(in, line))
nRows++;
}
****************
 

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,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top