|
|
Subject:
C++: reading numbers from file into an array
Category: Computers > Software Asked by: ironeagle_09-ga List Price: $10.00 |
Posted:
05 Dec 2005 21:53 PST
Expires: 07 Dec 2005 13:31 PST Question ID: 602008 |
I need to read a text file(format given below) in C++ filename:test.txt 3 1,2,3,4,5 2,1,3 3,4,2,1 I need to store the top number(3) in an variable(num). The rest, I need to store in an 2D array set[i][j]; The number of lines in the text file can be anywhere 3 to 25 lines. I need a simple C++ code to do this. It will help me if I can have the code by tomorrow afternoon(12/6). I will tip well for a fully working C++ code. Thanks in advance. |
|
There is no answer at this time. |
|
Subject:
Re: C++: reading numbers from file into an array
From: sarulan-ga on 06 Dec 2005 06:08 PST |
#include<stdio.h> main() { FILE *fp; fp=fopen("test.txt","rb"); int num; int *array[100]; /*assume maximum 100 numbers in a row*/ int test; int i,j,k; fscanf(fp,"%d",&num); /*get the top number*/ printf("num = %d\n",num);/*print the number*/ for(i=0;;i++)/*loop row*/ { for(j=0;;j++)/*loop column*/ { if(fscanf(fp,"%d",&test)==-1) /*get the number till file ends*/ goto end; array[i][j]=test; /*store it in array*/ printf("array[%d][%d] = %d\n",i,j,array[i][j]); /*print it*/ if((k=fgetc(fp))=='\n') /* if new line then goto next row*/ break; } } end:printf("All Done\n");/* Print all done*/ } |
Subject:
Re: C++: reading numbers from file into an array
From: ljbuesch-ga on 06 Dec 2005 06:57 PST |
haha, my c++ skills aren't as ub3r l33t as his, but this gets the job done. #include <iostream> #include <fstream> #include <string> #include <stdlib.h> using namespace std; #define MAX_LINES 25 #define MAX_IN_LINE 50 int main() { //open our file ifstream myfile ("test.txt"); //initialize our array's int myarray[MAX_LINES][MAX_IN_LINE]; //used for knowing how many numbers are stored in each array int totalargs[MAX_LINES]; //rest of variables string line,tempnum; int end=0; int firstarg=0,secondarg=0; int num; //set all of our arrays to be zero'd out memset(myarray,0,MAX_LINES*MAX_IN_LINE); memset(totalargs,0,MAX_LINES); //make sure file is opened if (myfile.is_open()) { //get a line getline(myfile,line); //the first line is the number, so set it to num num=atoi(line.c_str()); while(!myfile.eof()) { getline(myfile,line); //if there is a , in the line we have gotten while((end=line.find(',',0))!=string::npos) { //get the number before the , tempnum=line.substr(0,end); myarray[firstarg][secondarg]=atoi(tempnum.c_str()); secondarg++; //erase the part of the line we have gotten line.erase(0,end+1); } //we will have an extra number at the end after that loop //this gets that last number tempnum=line.substr(0,line.length()); myarray[firstarg][secondarg]=atoi(tempnum.c_str()); //set the number of args to our array totalargs[firstarg]=secondarg; firstarg++; //reset arg. secondarg=0; } } else { cout << "cannot open"; } //this is extra, but it just shows you your variables and that //they really do have numbers in them. cout << "num: " << num << endl; for (int x=0;x<firstarg;x++) { cout << "Array " << x+1 << ": " << myarray[x][0]; for (int y=1;y<=totalargs[x];y++) { cout << "," << myarray[x][y]; } cout << endl; } } |
Subject:
Re: C++: reading numbers from file into an array
From: sarulan-ga on 07 Dec 2005 06:35 PST |
#include<stdio.h> main() { FILE *fp; fp=fopen("test.txt","rb"); int num; int array[25][100]; /*assume maximum 100 numbers in a row*/ int test; int i,j,k; fscanf(fp,"%d",&num); /*get the top number*/ printf("num = %d\n",num);/*print the number*/ for(i=0;;i++)/*loop row*/ { for(j=0;;j++)/*loop column*/ { if(fscanf(fp,"%d",&test)==-1) /*get the number till file ends*/ goto end; array[i][j]=test; /*store it in array*/ printf("array[%d][%d] = %d\n",i,j,array[i][j]); /*print it*/ if((k=fgetc(fp))=='\n') /* if new line then goto next row*/ break; } } end:printf("All Done\n");/* Print all done*/ } |
Subject:
Re: C++: reading numbers from file into an array
From: ironeagle_09-ga on 07 Dec 2005 10:14 PST |
ljbuesch-ga..I tried your program and it worked ..thank you for the help.can u post the same as answer. |
Subject:
Re: C++: reading numbers from file into an array
From: firewireguy-ga on 07 Dec 2005 11:24 PST |
If you want to actually use proper C++ throughout and not use C functions and be limited by constant sized POD arrays (EVIL!) - no bounds checking, not dynamic etc. then this is 100% C++ (AKAIK). It also doesn't use things like atoi() and instead converts the number properly using istringstream >> #include <iostream> #include <vector> #include <fstream> #include <string> #include <sstream> using namespace std; #pragma warning(disable: 4786) void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " "); int main(int argc, char* argv[]) { int num; string str; //open the file (use forward slash to avoid accidentally using escape chars) fstream file_op("c:/test_file.txt",ios::in); //get the first digit on the first line if (!file_op.eof()) { getline(file_op, str); istringstream i(str); i >> num; } //create our vector that we will use vector<int> vecNumbers; vector<int>::const_iterator vecNumbersIt; vector< vector<int> > vecLines; vector< vector<int> >::const_iterator vecLinesIt; //will use a vector of strings for our Tokenise() function and then iterate //through it converting them to numbers vector<string> vecString; vector<string>::iterator vecStringIt; //dont reposition the file pointer, we are already on line two while(!file_op.eof()) { getline(file_op, str); vecNumbers.clear(); vecString.clear(); //split the line on the commas Tokenize(str, vecString, ","); //for each string in the vector convert it to a number -PROPERLY - and put it in vecNumbers for (vecStringIt = vecString.begin(); vecStringIt != vecString.end(); ++vecStringIt) { istringstream i(*vecStringIt); int x; i >> x; vecNumbers.push_back(x); } //we have every number in the line in vecNumbers, now put the numbers into the vecLine vecLines.push_back(vecNumbers); } //be nice and close the file file_op.close(); //OUTPUT ONLY cout << num << endl; for (vecLinesIt = vecLines.begin(); vecLinesIt != vecLines.end(); ++vecLinesIt) { vecNumbers = *vecLinesIt; for (vecNumbersIt = vecNumbers.begin(); vecNumbersIt != vecNumbers.end(); ++vecNumbersIt) { cout << *vecNumbersIt << ","; } cout << endl; } return 0; } void Tokenize(const string& str, vector<string>& tokens, const string& delimiters /*= " "*/) { // Skip delimiters at beginning. string::size_type lastPos = str.find_first_not_of(delimiters, 0); // Find first "non-delimiter". string::size_type pos = str.find_first_of(delimiters, lastPos); while (string::npos != pos || string::npos != lastPos) { // Found a token, add it to the vector. tokens.push_back(str.substr(lastPos, pos - lastPos)); // Skip delimiters. Note the "not_of" lastPos = str.find_first_not_of(delimiters, pos); // Find next "non-delimiter" pos = str.find_first_of(delimiters, lastPos); } } Hope this helps. |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
Search Google Answers for |
Google Home - Answers FAQ - Terms of Service - Privacy Policy |