Solved

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

Posted on 2007-11-16
15
261 Views
Last Modified: 2010-05-18
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
Comment
Question by:Troudeloup
  • 7
  • 3
  • 3
  • +1
15 Comments
 
LVL 45

Assisted Solution

by:Kdo
Kdo earned 150 total points
Comment Utility
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
 

Author Comment

by:Troudeloup
Comment Utility
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
 
LVL 40

Assisted Solution

by:evilrix
evilrix earned 150 total points
Comment Utility
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
 

Author Comment

by:Troudeloup
Comment Utility
what is this  O_o


_tmain  ?



that doesn't look like C++ to me (omg)
0
 
LVL 40

Assisted Solution

by:evilrix
evilrix earned 150 total points
Comment Utility
>> _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
 

Author Comment

by:Troudeloup
Comment Utility
uhhhh i have no idea what that does


where is getline?
0
 

Author Comment

by:Troudeloup
Comment Utility
0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 45

Assisted Solution

by:Kdo
Kdo earned 150 total points
Comment Utility
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
 
LVL 40

Assisted Solution

by:evilrix
evilrix earned 150 total points
Comment Utility
>> 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
 
LVL 53

Accepted Solution

by:
Infinity08 earned 200 total points
Comment Utility
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
 

Author Comment

by:Troudeloup
Comment Utility
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
 

Author Comment

by:Troudeloup
Comment Utility
btw, that is THE code I need to figure out how to use, and then I can do something :D
0
 
LVL 53

Assisted Solution

by:Infinity08
Infinity08 earned 200 total points
Comment Utility
>> 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
 

Author Comment

by:Troudeloup
Comment Utility
ahhhhh


i see, a built-in.

what if I want to read from the top, or just any line?
0
 
LVL 53

Assisted Solution

by:Infinity08
Infinity08 earned 200 total points
Comment Utility
>> 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

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now