Mercurial > repos > aaronquinlan > multi_intersect
comparison BEDTools-Version-2.14.3/src/utils/tabFile/tabFile.cpp @ 0:dfcd8b6c1bda
Uploaded
author | aaronquinlan |
---|---|
date | Thu, 03 Nov 2011 10:25:04 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:dfcd8b6c1bda |
---|---|
1 /***************************************************************************** | |
2 tabFile.cpp | |
3 | |
4 (c) 2009 - Aaron Quinlan | |
5 Hall Laboratory | |
6 Department of Biochemistry and Molecular Genetics | |
7 University of Virginia | |
8 aaronquinlan@gmail.com | |
9 | |
10 Licensed under the GNU General Public License 2.0 license. | |
11 ******************************************************************************/ | |
12 #include "lineFileUtilities.h" | |
13 #include "tabFile.h" | |
14 | |
15 /******************************************* | |
16 Class methods | |
17 *******************************************/ | |
18 | |
19 // Constructor | |
20 TabFile::TabFile(const string &tabFile) | |
21 : _tabFile(tabFile) | |
22 {} | |
23 | |
24 // Destructor | |
25 TabFile::~TabFile(void) { | |
26 } | |
27 | |
28 | |
29 void TabFile::Open(void) { | |
30 if (_tabFile == "stdin") { | |
31 _tabStream = &cin; | |
32 } | |
33 else { | |
34 size_t foundPos; | |
35 foundPos = _tabFile.find_last_of(".gz"); | |
36 // is this a GZIPPED TAB file? | |
37 if (foundPos == _tabFile.size() - 1) { | |
38 igzstream tabs(_tabFile.c_str(), ios::in); | |
39 if ( !tabs ) { | |
40 cerr << "Error: The requested file (" << _tabFile << ") could not be opened. Exiting!" << endl; | |
41 exit (1); | |
42 } | |
43 else { | |
44 // if so, close it (this was just a test) | |
45 tabs.close(); | |
46 // now set a pointer to the stream so that we | |
47 // can read the file later on. | |
48 _tabStream = new igzstream(_tabFile.c_str(), ios::in); | |
49 } | |
50 } | |
51 // not GZIPPED. | |
52 else { | |
53 | |
54 ifstream tabs(_tabFile.c_str(), ios::in); | |
55 // can we open the file? | |
56 if ( !tabs ) { | |
57 cerr << "Error: The requested file (" << _tabFile << ") could not be opened. Exiting!" << endl; | |
58 exit (1); | |
59 } | |
60 else { | |
61 // if so, close it (this was just a test) | |
62 tabs.close(); | |
63 // now set a pointer to the stream so that we | |
64 // can read the file later on. | |
65 _tabStream = new ifstream(_tabFile.c_str(), ios::in); | |
66 } | |
67 } | |
68 } | |
69 } | |
70 | |
71 | |
72 // Close the TAB file | |
73 void TabFile::Close(void) { | |
74 if (_tabFile != "stdin") delete _tabStream; | |
75 } | |
76 | |
77 | |
78 TabLineStatus TabFile::GetNextTabLine(TAB_FIELDS &tabFields, int &lineNum) { | |
79 | |
80 // make sure there are still lines to process. | |
81 // if so, tokenize, return the TAB_FIELDS. | |
82 if (_tabStream->good() == true) { | |
83 string tabLine; | |
84 tabFields.reserve(20); | |
85 | |
86 // parse the tabStream pointer | |
87 getline(*_tabStream, tabLine); | |
88 lineNum++; | |
89 | |
90 // split into a string vector. | |
91 Tokenize(tabLine, tabFields); | |
92 | |
93 // parse the line and validate it | |
94 return parseTabLine(tabFields, lineNum); | |
95 } | |
96 | |
97 // default if file is closed or EOF | |
98 return TAB_INVALID; | |
99 } |