View Single Post
Old Nov 5th, 2007, 9:54 AM   #5
Soulstorm
Hobbyist Programmer
 
Soulstorm's Avatar
 
Join Date: Jan 2006
Location: Menidi, Athens, Greece
Posts: 239
Rep Power: 3 Soulstorm is on a distinguished road
Re: Jumping to a specific line number in a text file

cpp Syntax (Toggle Plain Text)
  1. class Floader{
  2. stdVector<stdString> loadedData;
  3. public:
  4. //constructors
  5. Floader(const char *);
  6. Floader(){}
  7. //data manipulation
  8. void resetData();
  9. void loadDataFromFile(const char *);
  10.  
  11. int size();
  12. stdString getLine(int);
  13. void showContents();
  14. void outputToFile(const char *);
  15. stdString str();
  16.  
  17.  
  18. stdString& operator[](int num){return loadedData[num];}
  19. Floader operator=(Floader&);
  20. Floader operator+(stdString &str){
  21. loadedData.push_back(str);
  22. return *this;
  23. }
  24.  
  25. stdVector<stdString>& getLoadedData();
  26.  
  27. //Delete Lines. You can insert as many variables as you want
  28. //At the end of the arguments, terminate with -1 as the last
  29. //argument
  30. void deleteLines(int line ... );
  31. void deleteLinesContainingCharacters(stdString str);
  32.  
  33. void loadDataFromString(const char* str);
  34. //--Look at the implementation file for this function...
  35. friend stdOstream& operator<<(stdOstream &stream, Floader &ob);
  36.  
  37.  
  38. void cleanup();
  39. void cleanupForSoulParser();
  40. };
  41.  
  42.  
  43. //IMPLEMENTATION
  44.  
  45.  
  46. Floader::Floader(const char *fileName){
  47. loadDataFromFile(fileName);
  48. }
  49.  
  50.  
  51. void Floader::resetData(){
  52. loadedData.clear();
  53. }
  54.  
  55. void Floader::loadDataFromFile(const char *fileName){
  56. int i;
  57. resetData();
  58. stdString line;
  59. fstream myFile(fileName);
  60. for (i=0; myFile.good(); i++) {
  61. getline(myFile,line);
  62. loadedData.push_back(line);
  63. }
  64.  
  65. myFile.close();
  66. stdCout << "Process completed\n";
  67. }
  68.  
  69. int Floader::size(){
  70. return loadedData.size();
  71. }
  72.  
  73. stdString Floader::getLine(int pos){
  74. return loadedData[pos];
  75. }
  76.  
  77. void Floader::showContents(){
  78. int i;
  79. for (i=0; i<loadedData.size(); i++) {
  80. stdCout << loadedData[i] << "\n";
  81. }
  82. }
  83.  
  84.  
  85. void Floader::deleteLines(int line ... )
  86. {
  87. va_list VL;
  88. va_start(VL, line);
  89. for (;;) {
  90. int p= va_arg(VL, int);
  91. try {
  92. if(p<0)
  93. break;
  94. else if (p < loadedData.size()) {
  95. stdVector<stdString>::iterator alpha;
  96. alpha = loadedData.begin();
  97. for (int i=0; i<line; i++)
  98. alpha++;
  99. loadedData.erase(alpha);
  100. }
  101. else
  102. throw argument_out_of_bounds(p,INTEGER);
  103.  
  104. }
  105. catch (argument_out_of_bounds& error) {
  106. error.description();
  107. }
  108. }
  109.  
  110. va_end(VL);
  111. }
  112.  
  113.  
  114. void Floader::outputToFile(const char *filename){
  115. int i;
  116. stdOfstream outFile(filename);
  117. for (i=0; i<loadedData.size(); i++) {
  118. outFile << loadedData[i] << "\n";
  119. }
  120. outFile.close();
  121. }
  122.  
  123. stdString Floader::str(){
  124. stdString result;
  125. for (int i=0; i<loadedData.size(); i++) {
  126. result = result + '\n' + loadedData[i];
  127. }
  128. return result;
  129. }
  130.  
  131. stdVector<stdString>& Floader::getLoadedData(){
  132. return loadedData;
  133. }
  134.  
  135. void Floader::deleteLinesContainingCharacters(stdString str){
  136. for (int i=0; i<loadedData.size(); i++) {
  137. if (loadedData[i].find(str) != stdString::npos){
  138. loadedData.erase(loadedData.begin()+i);
  139. deleteLinesContainingCharacters(str);
  140. }
  141. }
  142. }
  143.  
  144. void Floader::cleanup(){
  145. for (int i=0; i<loadedData.size(); i++) {
  146. stdString str = loadedData[i];
  147. str = clearStringFromSpaces(str);
  148. loadedData[i] = str;
  149. if( str == "\n" || str.length() <=1 ){
  150. loadedData.erase(loadedData.begin() + i);
  151. cleanup();
  152. }
  153. }
  154. }
  155.  
  156. void Floader::cleanupForSoulParser(){
  157. for (int i=0; i<loadedData.size(); i++) {
  158. stdString str = loadedData[i];
  159. if (str.find(char(OPENING_BRACKET)) == string::npos) {
  160. str = clearStringFromSpaces(str);
  161. loadedData[i] = str;
  162. if( str == "\n" || str.length() <=1 ){
  163. loadedData.erase(loadedData.begin() + i);
  164. cleanupForSoulParser();
  165. }
  166. }
  167. }
  168. }
  169.  
  170. void Floader::loadDataFromString(const char* str){
  171. stdStringStream SStream;
  172. SStream << str;
  173. stdString line;
  174. while (SStream.good()) {
  175. getline(SStream,line);
  176. loadedData.push_back(line);
  177. }
  178.  
  179. }
  180.  
  181. //----------------------FRIEND FUNCTIONS----------------------
  182. stdOstream& operator<<(stdOstream &stream, Floader &ob){
  183. for (int i=0; i<ob.size(); i++) {
  184. stream << ob[i] <<'\n';
  185. }
  186. return stream;
  187. }

It's from an old project of mine. It will have a file as an input and will result in a vector holding the lines. I hope it helps you.
__________________
Project::Soulstorm (personal homepage)
Soulstorm is offline   Reply With Quote