[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

reading a text file into a structure

Posted on 1998-04-20
5
Medium Priority
?
218 Views
Last Modified: 2010-04-10
I have a seemingly basic task that is eluding me. I need to read a text file into a structure in the format <company name>,<address>, <city,state,zip>. I also have some parts information that needs to go into a separate structure in the format <# of items on invoice>, <item name>,<item code #>, <item price>, <item quantity>. I can't find an example in my textbook (How to Program C++, 2nd ed., Deitel & Deitel). All the information is in a single text file in the order given. My compiler is MSVC++ 5.0. Thanks for any help I can get!!  
0
Comment
Question by:hwhipple
5 Comments
 
LVL 22

Expert Comment

by:nietod
ID: 1162386
What is the format of the text file?  What delimits the differnet fields?  That is how can you tell the address from the company name?  What is the format of the structures  How long ar these strings or can they be any length?
0
 
LVL 4

Accepted Solution

by:
piano_boxer earned 100 total points
ID: 1162387
If every field (<company name>, <address>....) allways is separated by a comma, then you could read a single line of text into a local buffer, and extract the fields (tokens) one by one.

char* pToken;
char buf[1024];
FILE* pFile;

pFile = fopen("file.txt", "r");
if(pFile)
{
    while(fgets(buf, sizeof(buf), pFile))
    {
        pToken = strtok(buf, ",");
        while(pToken)
        {
            TRACE("Token found = %s\n", pToken);
            pToken = strtok(NULL, ",");
        }
    }
    fclose(pFile);
}
   


0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1162388
I have a sample app for reading comma separated values from a file and displaying etc.

The key routine is

CString GetField(CString& ref, int nIndex, TCHAR ch = _T(','))
{
  CString strReturn;
  LPCTSTR pstrStart = ref.LockBuffer();
  LPCTSTR pstrBuffer = pstrStart;
  int nCurrent = 0;
  int nStart = 0;
  int nEnd = 0;
  int nOldStart = 0;
  while (nCurrent <= nIndex && *pstrBuffer != _T('\0'))
  {
    if (*pstrBuffer == ch)
    {
      nOldStart = nStart;
      nStart = nEnd+1;
      nCurrent++;
    }
    nEnd++;
    pstrBuffer++;
  }
  ref.UnlockBuffer();
  if (*pstrBuffer == _T('\0'))
  {
    TRACE("Warning: Couldn't find it.\n");
    return strReturn;
  }
  return ref.Mid(nOldStart, nEnd-nOldStart-1);
}

this extract a given field (by field number) from the string.

For points I could send you the full sample code :-)
0
 
LVL 5

Expert Comment

by:yonat
ID: 1162389
Take a look at http://www.snippets.org/STRUCFIL.H and http://www.snippets.org/STRUCFIL.C and see if this is what you are loong for.
0
 

Expert Comment

by:manuel_99
ID: 12235266
Hello I'm new here, I having problem reading a text file. it looks like this:
Peter,sydney australia,1223
I know how to open the file and read the lines, but how can I separate the values that are text delimited and put them into an array?
//My struc look like this
struct Sighting{
      string firstName;
      string city;
      int postcode;
};

//this is the body
  file1.open("textfile.txt");
  if (file1.fail())
  {
        cout<<"File Open Error";
        exit(-1);
  }
  int i=0;
  while(!file1.eof())
  {
        getFileEntry(file1,p1[i]);
        i++;
  }

  for (int j=0; j<i-1; j++)
  {
          displayEntry(p1[j]);
  }
file1.close();
 }
void getFileEntry(ifstream &infile, Sighting &anEntry)
{
      infile>>anEntry.firstName;
      infile>>anEntry.surName;
      infile>>anEntry.extension;
}
//display
void displayEntry(Sighting anEntry)
{
cout << setw(20) << anEntry.firstName << setw(20) << anEntry.surName << " ";
cout << setw(4) << setfill('0') << anEntry.extension << setfill(' ') << endl;
}

// function to sort an array of Phone Entries into descending order
void selectionSortStruct(Sighting entryArray[], int length){
}
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

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

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
Suggested Courses

834 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