getline - 2 questions

From: ma740988 (ma740988_at_pegasus.cc.ucf.edu)
Date: 07/31/04


Date: 30 Jul 2004 23:36:49 -0700

Consider:

      ifstrem MyFile("extractMe.txt");
      string Str;
      getline(MyFile, Str);
getline above extracts the contents of MyFile and place into the
string object. Deduced using FROM/TO logic I could state getline's
first parameter supports "FROM". The second parameter supports "TO".

      // later
      istringstream Stream(Str);
      const int MAX(100);
      char buf[MAX];
      Stream.getline(buf, MAX);

Here getline extracts up to MAX the contents of the Stream and place
into buf. Except, with regards to the first/second parameters my FROM
-> TO logic doesn't make sense.

When viewed from a parameter perspective, it appears to me that theres
differing views to getline. Yes/No?

//////////////////////////// Question 2 ////////////////////////////

For test purposes the contents of a file I'm interested in reading are
as follows:

Australia
5E56,7667230284,Langler,Tyson,31.2147,0.00042117361
2B97,7586701,Oneill,Zeke,553.429,0.0074673053156065
France
// etc

The struct UserInfo (below) is used to describe the data. So now
Australia, represents the region, 5E56 represents the seller id,
7667230284 represents the phone number and so on.

struct UserInfo
{
  string Region;
  string SellerId;
  double PhoneNum; //Phone number too large for an int.
  string LastName;
  string FirstName;
  double TotalSales;
  double AmountTotalSales;
};

#if 0
std::ostream& operator << ( std::ostream& Out, const
std::vector<UserInfo>& V )
{
  std::vector<UserInfo>::const_iterator Pos = V.begin();
  for( Pos; Pos != V.end(); ++Pos )
          Out << Pos->AmountTotalSales; // Test

  return Out;
}
#endif

int main()
{

  ifstream File("exercise15.txt");
  if (!File.is_open())
  {
    cerr << " error opening file ";
    exit(1);
  }

  string Str;
  vector<UserInfo> info;
  UserInfo userInfo;
  while (getline(File, Str))
  {
    std::istringstream Stream(Str);
    string::size_type Idx = Str.find(',');
    if (Idx == string::npos)
    {
      Stream >> userInfo.Region;
      //cout << userInfo.Region << '\n';
    }
    else
    {
      char comma;

      getline(Stream, userInfo.SellerId, ',');
      Stream >> userInfo.PhoneNum >> comma;
      getline(Stream, userInfo.LastName, ',');
      getline(Stream, userInfo.FirstName, ',');
      Stream >> userInfo.TotalSales >> comma;
      Stream >> userInfo.AmountTotalSales >> comma;
          
#if 0
      cout << userInfo.SellerId << '\n';
      cout << userInfo.PhoneNum << '\n';
      cout << userInfo.LastName << '\n';
      cout << userInfo.FirstName << '\n';
      cout << userInfo.TotalSales << '\n';
          cout << userInfo.AmountTotalSales << '\n';
          cout << '\n';
#endif
    }
    info.push_back(userInfo);
  }
  File.close();
}

Works. Now, I need to print the data in a specific format. i.e

                        Australia
-------------------------------------------------------------------------------
SellerId Phone Number Last Name First Name Total Sales Amount
Total
  24150 (766)723-0284 Langler Tyson 31.2147
0.00042117361

The question. Would overloading the operator << be the most viable
approach?
Comments on my approach in extracting the data is also welcome.

Note: I've seen - for my level - some sophisticated approaches
(facets, locales, copying classic_tables etc ) to handling delimited
streams. I was opting to use one of them but I figured I'll try to
walk first before I run - so to speak.

Thanks in advance.



Relevant Pages

  • Re: regexp truncate line (too long to read)
    ... the range of string that matched all of exp ... grab some numbers to variable mynum ... So we are desperately trying to make "08" to a number "8", what can Tcl do for us poor misguided zero-leading numbers using primates? ... This extracts the ML_nn_NAME from the start of the whole line and then extracts the nn as number from that and then passes out the highest value of nn found. ...
    (comp.lang.tcl)
  • Re: INT conversion
    ... I suspect that your number is still a string until it has ... extracts an important number from within a string in the text field ... Then I manually change the format of the ...
    (microsoft.public.access.queries)
  • Re: Duplicates in excel that arent 100% DUPLICATES ...
    ... want the name of the street because the end of the string varies (i.e. ... Mid works the same as left put extracts the middle of a string. ... Westbourne" from "111 Westbourne Terr. ... sort through the mess. ...
    (microsoft.public.excel.misc)
  • Re: Duplicates in excel that arent 100% DUPLICATES ...
    ... want the name of the street because the end of the string varies (i.e. ... Mid works the same as left put extracts the middle of a string. ... Westbourne" from "111 Westbourne Terr. ... sort through the mess. ...
    (microsoft.public.excel.misc)
  • Re: Extract a number from a variable text string
    ... Microsoft Excel MVP ... I would now like to enhance the formula, such that it ONLY extracts the ... number if the first two characters in the string are S, ... median of the series. ...
    (microsoft.public.excel.misc)