Solved

reading a text file into a structure

Posted on 1998-04-20
5
214 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
[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 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 50 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

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

Suggested Solutions

Title # Comments Views Activity
White board coding practice 3 98
Why isn't object file created? 6 106
object oriented programming comparison 5 93
Error creating a new C++ project in ,net 20 59
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…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
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 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.

734 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