rlSpreadsheetTable Class Reference

#include <rlspreadsheet.h>

Collaboration diagram for rlSpreadsheetTable:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 rlSpreadsheetTable (char delimitor='\t')
 column = 1...N, row = 1...N
virtual ~rlSpreadsheetTable ()
const char * text (int column, int row)
void setText (int column, int row, const char *text)
int printf (int column, int row, const char *format,...)
void clear ()
int read (const char *filename)
int write (const char *filename)
void setNextTable (rlSpreadsheetTable *next)
rlSpreadsheetTablegetNextTable ()
rlSpreadsheetRowgetFirstRow ()
int exists (int column, int row)

Private Attributes

char delimitor
rlSpreadsheetRowfirstRow
rlSpreadsheetTablenextTable

Detailed Description

A spreadsheet Table.
The class works with CSV files.

Definition at line 69 of file rlspreadsheet.h.


Constructor & Destructor Documentation

rlSpreadsheetTable::rlSpreadsheetTable ( char  delimitor = '\t'  ) 

column = 1...N, row = 1...N

Definition at line 254 of file rlspreadsheet.cpp.

00255 {
00256   firstRow  = NULL;
00257   nextTable = NULL;
00258   delimitor = del;
00259 }

rlSpreadsheetTable::~rlSpreadsheetTable (  )  [virtual]

Definition at line 261 of file rlspreadsheet.cpp.

00262 {
00263   rlSpreadsheetRow *item,*last;
00264   item = firstRow;
00265   while(item != NULL)
00266   {
00267     last = item;
00268     item = item->getNextRow();
00269     if(item != last) delete last;
00270   }
00271 }


Member Function Documentation

void rlSpreadsheetTable::clear (  ) 

Definition at line 319 of file rlspreadsheet.cpp.

00320 {
00321   rlSpreadsheetRow *item;
00322 
00323   item = firstRow;
00324   while(item != NULL)
00325   {
00326     item->clear();
00327     item = item->getNextRow();
00328   }
00329 }

int rlSpreadsheetTable::exists ( int  column,
int  row 
)

Definition at line 406 of file rlspreadsheet.cpp.

00407 {
00408   rlSpreadsheetRow *item;
00409   int r;
00410 
00411   r = 1;
00412   item = firstRow;
00413   while(item != NULL)
00414   {
00415     if(r == row) return item->exists(column);
00416     r++;
00417     item = item->getNextRow();
00418   }
00419   return 0;
00420 }

rlSpreadsheetRow * rlSpreadsheetTable::getFirstRow (  ) 

Definition at line 396 of file rlspreadsheet.cpp.

00397 {
00398   return firstRow;
00399 }

rlSpreadsheetTable * rlSpreadsheetTable::getNextTable (  ) 

Definition at line 401 of file rlspreadsheet.cpp.

00402 {
00403   return nextTable;
00404 }

int rlSpreadsheetTable::printf ( int  column,
int  row,
const char *  format,
  ... 
)

Definition at line 306 of file rlspreadsheet.cpp.

00307 {
00308   int ret;
00309   char buf[rl_PRINTF_LENGTH_SPREADSHEET]; // should be big enough
00310 
00311   va_list ap;
00312   va_start(ap,format);
00313   ret = rlvsnprintf(buf, rl_PRINTF_LENGTH_SPREADSHEET - 1, format, ap);
00314   va_end(ap);
00315   setText(column,row,buf);
00316   return ret;
00317 }

int rlSpreadsheetTable::read ( const char *  filename  ) 

Definition at line 331 of file rlspreadsheet.cpp.

00332 {
00333   FILE *fp;
00334   rlSpreadsheetRow *item,*last,*next;
00335   unsigned char *line;
00336   int r = 1;
00337   if(filename == NULL) return -1;
00338 
00339   // delete old table
00340   item = firstRow;
00341   while(item != NULL)
00342   {
00343     last = item;
00344     item = item->getNextRow();
00345     if(item != last) delete last;
00346   }
00347 
00348   // read new table
00349   fp = fopen(filename,"r");
00350   if(fp == NULL) return -1;
00351   line = new unsigned char[256*256+1];
00352   while(fgets((char *) line,256*256,fp) != NULL)
00353   {
00354     if(r==1)
00355     {
00356       item = firstRow = new rlSpreadsheetRow;
00357     }
00358     else
00359     {
00360       next = new rlSpreadsheetRow;
00361       item->setNextRow(next);
00362       item = next;
00363     }
00364     item->readRow(line,delimitor);
00365     r++;
00366   }
00367   delete [] line;
00368   fclose(fp);
00369   return 0;
00370 }

void rlSpreadsheetTable::setNextTable ( rlSpreadsheetTable next  ) 

Definition at line 391 of file rlspreadsheet.cpp.

00392 {
00393   nextTable = next;
00394 }

void rlSpreadsheetTable::setText ( int  column,
int  row,
const char *  text 
)

Definition at line 288 of file rlspreadsheet.cpp.

00289 {
00290   int r = 1;
00291   rlSpreadsheetRow *item,*nextitem;
00292 
00293   if(row < 1) return;
00294   if(firstRow == NULL) firstRow = new rlSpreadsheetRow;
00295   item = firstRow;
00296   while(1)
00297   {
00298     if(r == row) { item->setText(column,text); return; }
00299     nextitem = item->getNextRow();
00300     if(nextitem == NULL) item->setNextRow(new rlSpreadsheetRow);
00301     item = item->getNextRow();
00302     r++;
00303   }
00304 }

const char * rlSpreadsheetTable::text ( int  column,
int  row 
)

Definition at line 273 of file rlspreadsheet.cpp.

00274 {
00275   int r = 1;
00276   rlSpreadsheetRow *item;
00277 
00278   item = firstRow;
00279   while(item != NULL)
00280   {
00281     if(r == row) return item->text(column);
00282     item = item->getNextRow();
00283     r++;
00284   }
00285   return null_string;
00286 }

int rlSpreadsheetTable::write ( const char *  filename  ) 

Definition at line 372 of file rlspreadsheet.cpp.

00373 {
00374   rlSpreadsheetRow *item;
00375   FILE *fp;
00376   if(filename == NULL) return -1;
00377   fp = fopen(filename,"w");
00378   if(fp == NULL) return -1;
00379 
00380   item = firstRow;
00381   while(item != NULL)
00382   {
00383     item->writeRow((void *) fp);
00384     item = item->getNextRow();
00385   }
00386 
00387   fclose(fp);
00388   return 0;
00389 }


Member Data Documentation

Definition at line 86 of file rlspreadsheet.h.

Definition at line 87 of file rlspreadsheet.h.

Definition at line 88 of file rlspreadsheet.h.


The documentation for this class was generated from the following files:
Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3