[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 307
  • Last Modified:

[noob][c++] how do I use getline?

I am trying to get lines from a text file ,

please show me how to do it with getline.


// open stream file.txt

//  var = getline (file.txt)


but I don't know how to tell it to read from a specific line.
0
Troudeloup
Asked:
Troudeloup
  • 7
  • 3
  • 3
  • +1
8 Solutions
 
Kent OlsenData Warehouse Architect / DBACommented:
Hi Troudeloup,

You're stuck in C syntax.  :)   A very common thing to do.

When you open the stream, you'll assign the stream to a Scalar Variable name.  The variable is the object that you reference.

  MyStream = OpenFile ("file.txt");

  MyStream->GetLine ();



Good Luck,
Kent
0
 
TroudeloupAuthor Commented:
I don't understand :(



also, isn't this c++ syntax?



3rd, this is what I plan to do after I have the specific line in the variable







#include <iostream>

using namespace std;



int main ()
{
      string string1 = "I love my bike";
      int pos;
      pos = string1.find ( "I" );
      cout << pos << endl;
      return 0;
}









hence the need to specify a specific line to read from.
0
 
evilrixSenior Software Engineer (Avast)Commented:
Example...
#include <sstream>
 
size_t const MAX_LINE = 50;
 
int _tmain(int argc, _TCHAR* argv[])
{
	std::stringstream ss("hello\nworld\nfrom\nvienna");
 
	for(;;)
	{
		char line[MAX_LINE];
		ss.getline(line,MAX_LINE);
 
		if(ss.eof()) { break; }
		if(ss.bad()) { throw -1; }
 
		// Do something with line
	}
}

Open in new window

0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
TroudeloupAuthor Commented:
what is this  O_o


_tmain  ?



that doesn't look like C++ to me (omg)
0
 
evilrixSenior Software Engineer (Avast)Commented:
>> _tmain  ?

That's just VC8.0 -- it's a unicode friendly version of main()

How to read the whole buffer in one go...
int _tmain(int argc, _TCHAR* argv[])
{
	// Pretend file stream
	std::stringstream ss("hello\nworld\nfrom\nvienna");
 
	// Get stream size
	ss.seekg(0, std::ios_base::end);
	std::streamsize const nSize = ss.tellg();
	ss.seekg(0, std::ios_base::beg);
 
	// Throw on invalid size
	if(nSize < 0) { throw -1; }
 
	// Make buffer the size we need
	std::string sBuf(nSize, 0);
 
	// Read buffer
	ss.read(&sBuf[0], nSize);
 
	// Throw on read error
	if(ss.bad()) { throw -1; }
 
	// Do something with sBuf
}

Open in new window

0
 
TroudeloupAuthor Commented:
uhhhh i have no idea what that does


where is getline?
0
 
Kent OlsenData Warehouse Architect / DBACommented:
Hi Troudeloup,

Sorry -- broke for lunch.  :)

Here's a link to a short example where streams are used to read and write files.  Take a look and see if the example clears things up fo ryou.

  http://www.wellho.net/resources/ex.php4?item=c235/file01.cpp

Good Luck,
Kent
0
 
evilrixSenior Software Engineer (Avast)Commented:
>> uhhhh i have no idea what that does

It reads in the whole file into the std::string for you. Why don't you try it -- compile it and step through it and see what it does!

-Rx
0
 
Infinity08Commented:
Take a look here :

        http://www.cplusplus.com/reference/string/getline.html

There's also example code on that page.

And a general tutorial for file I/O :

        http://www.cplusplus.com/doc/tutorial/files.html
0
 
TroudeloupAuthor Commented:
ok i got this from
http://www.cplusplus.com/reference/string/getline.html



what I don't understand is that if it uses a while to print lines until eof is reached, then shouldn't there
be some sort of a counter?

in
                  getline (myfile,line);
                  cout << line << endl;

what's the thing that tells it to read the next line?



// reading a text file
#include <iostream>
#include <fstream>
#include <string>


using namespace std;

int main ()
{
      string line;
      ifstream myfile ("example.txt");
      
      
      
      if ( myfile.is_open() )
      {
            while ( ! myfile.eof() )
            {
                  getline (myfile,line);
                  cout << line << endl;
            }
      
      myfile.close();
      }

      else cout << "Unable to open file";

      return 0;
}
0
 
TroudeloupAuthor Commented:
btw, that is THE code I need to figure out how to use, and then I can do something :D
0
 
Infinity08Commented:
>> what's the thing that tells it to read the next line?

If you call getline, then it will read the next line from the stream. The stream pointer will then point AFTER that line, so the next time getline gets called, it reads the next line.
0
 
TroudeloupAuthor Commented:
ahhhhh


i see, a built-in.

what if I want to read from the top, or just any line?
0
 
Infinity08Commented:
>> what if I want to read from the top,

Just re-open the file, or re-wind the file. And the stream will be re-set to the beginning of the file.


>> or just any line?

You'll have to read lines until you reach the line you want.
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 7
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now