Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

STL getline fails

Posted on 2002-06-28
10
Medium Priority
?
1,380 Views
Last Modified: 2008-02-26
I'm using 'getline' for reading data from a file and writing it to another file.
like
  getline(inputFileObject,string,'\n')
It fails when there is occurance of the following character pattern
(\r\n\r\n\r\n)

0D 0A 0D 0A 0D 0A

characters. My OS is DYNIX/PTX (UNIX)

The same code works in VC++ 6.0.

Any idea?

(using 'strings' command and processing the input file works. but it looses format)


0
Comment
Question by:prashant_n_mhatre
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
10 Comments
 
LVL 49

Expert Comment

by:DanRollins
ID: 7117365
In what way does it fail?  I would expect it to return three empty strings.  What is it doing?

-- Dan
0
 
LVL 4

Author Comment

by:prashant_n_mhatre
ID: 7117489
Here is the dump of the portion:

http://www.onesmartclick.com/books/dump.gif

It writes till '<html>' then doesn't write anything to file.

This is the test code I'm using:


void writeToFile(ifstream& inpFile)
{
    string refLine;
    ofstream fileout ("output.txt");
    while ( getline(inpFile,refLine,'\n') )
    {
        fileout << refLine;
        fileout << "\n";
    }
    fileout.close();
}

May be the code is buggy.

0
 
LVL 8

Expert Comment

by:fl0yd
ID: 7123793
You should definately get rid of those constants, i.e. "\n" is bad -- the stl does have a replacement for that, that works across platforms: std::endl -- use this and see if it solves your problem.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 49

Expert Comment

by:DanRollins
ID: 7123920
It has something to do with the idiotic STL and namespace.  This sequence works because I waved a magic std wand over it:

#include <fstream>
#include <string>

void writeToFile( std::ifstream& inpFile )
{
     std::string refLine;
     std::ofstream fileout ("c:\\temp\\output.txt");
     while ( std::getline( inpFile, refLine, '\n' ) ) {
          fileout << refLine;
          fileout << "\n";
     }
     fileout.close();
}

void main()
{
     std::ifstream inpFile( "c:\\temp\\input.txt" );
     writeToFile(inpFile);
}

-- Dan
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 7128447
hi prashant_n_mhatre,
Do you have any additional questions?  Do any comments need clarification?
-- Dan
0
 
LVL 4

Author Comment

by:prashant_n_mhatre
ID: 7128641
I tried out both options..nothing works... Works on Windows but doesn't work on DYNIX/PTX... Is it possible that stl library on DYNIX/PTX is buggy?
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 7128744
>> Is it possible that stl library on DYNIX/PTX is buggy?

It is possible.  But I ask that you try the sequence I provided, without change of any kind... it is a complete program.  Verify that it fails *only* when the input file has exactly four sequential sets of 0x0d 0x0a bytes.  Does it also fail with three or two in a row?

You might also want to try opening the file in binary mode (that was my first guess, but I stopped short of that when I got my sample working).

-- Dan
0
 
LVL 4

Author Comment

by:prashant_n_mhatre
ID: 7132069
It doesn't compile on my machine. It says

"dan.cpp", line 8: error #304: no instance of overloaded function
          "std::getline" matches the argument list
            argument types are: (std::ifstream, std::string, char)
                        while ( std::getline( inpFile, refLine, '\n' ) ) {
                                ^

1 error detected in the compilation of "dan.cpp".
c++: Fatal Error: Compilation failed
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 200 total points
ID: 7132574
The compiler must be buggy.  The first param is a std::ifstream, the second param is a std::string, and the third parm is a char.  So the error message is bogus.  Stick to VC++ Its the only compiler worth using.

-- Dan
0
 
LVL 4

Author Comment

by:prashant_n_mhatre
ID: 7165544
Yep..I also think so..Thanks for your help !!!
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
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.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

609 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