Re: very basic question: read lines from file, split each line on tab and put that into an array, store a specific element of array
Hi red floyd,
Thanks very much for the answer. I'm trying to implement it and having
a bit of trouble. (I'm completely new to C++.) Adding a "\t" delimiter
to the "getline" function gives me a continuous stream of tab-
delimited strings that are not organized according to line. I then
thought I'd use "getline" to get each line and store each line in a
variable called "line", and then within each successfully acquired
"line", I would use "getline" with a "\t" delimiter with the input
being "line", the variable I want to store each tab-delimited element
in being "element", and the delimiter, of course, being '\t'. That
didn't work:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using std::endl;
using std::string;
using std::cout;
using std::ifstream;
using std::vector;
int main () {
string line;
ifstream myfile ("/Users/efoss/sequencing/simple_base_count/
partial_accepted_hits_23350.sam");
if (myfile.is_open()) {
while (getline(myfile, line)) {
vector<string> elements;
string element;
while (getline(line&, element, '\t')) {
elements.push_back(element);
}
for (int i = 0; i != elements.size(), ++i) {
cout << i << "\t" << elements[i] << endl;
}
}
myfile.close();
}
else cout << "Unable to open file " << myfile << endl;
cout << "done!" << endl;
return 0;
}
____________________________
I then Googled around for information on istringstream and
istream_iterator. I came across a post of yours on another site:
http://bytes.com/topic/c/answers/167600-split-string
Based on this, I made this .h file (which I called
"split_on_tab_060411_1.h"):
#ifndef GUARD_split_on_tab_060411_1
#define GUARD_split_on_tab_060411_1
#include <string>
#include <vector>
std::vector<std::string> split(const std::string&);
#endif
__________________________
I made this .cpp file (which I called "split_on_tab_060411_1.cpp"):
#include "split_on_tab_060411_1.h"
#include <string>
#include <sstream>
#include <iterator>
#include <vector>
using std::vector;
using std::string;
using std::istream_iterator;
using std::istringstream;
vector<string> split(const string& s) {
istringstream is(s);
return vector<string>(istream_iterator<string>(is),
istream_iterator<string());
}
_______________________
and I made this main.cpp file (which I called
"reading_bases_060411_2.cpp"):
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using std::endl;
using std::string;
using std::cout;
using std::ifstream;
using std::vector;
int main () {
string line;
ifstream myfile ("/Users/efoss/sequencing/simple_base_count/
partial_accepted_hits_23350.sam");
if (myfile.is_open()) {
while (getline(myfile, line)) {
//at this point you have a string called "line"
//it gets successfully printed out if I uncomment the
following
line:
//cout << line << endl;
}
myfile.close();
}
else cout << "Unable to open file " << myfile << endl;
cout << "done!" << endl;
return 0;
}
______________________________
If I run just my main function without including the "split_on_tab"
files, everything is fine. I know that I'm reading in my lines fine,
since I can print them out. However, if I try to add in my
"split_on_tab" files and use the "split" function, then I can't get
anything to work. Do you see what I am doing wrong?
Thanks very much for the help.
Eric
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]