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