本文整理汇总了C++中Scanner::Next方法的典型用法代码示例。如果您正苦于以下问题:C++ Scanner::Next方法的具体用法?C++ Scanner::Next怎么用?C++ Scanner::Next使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Scanner
的用法示例。
在下文中一共展示了Scanner::Next方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: printLexicalTable
void Printer::printLexicalTable(Scanner& scanner, bool withTable)
{
_cellSeparator = withTable ? '|' : ' ';
int t_len = withTable ? TOKEN_TEXT_LEN + TOKEN_TYPE_LEN + TOKEN_VALUE_LEN + TOKEN_LINE_LEN : 0;
string tframe(t_len, '-');
if (withTable) {
cout << "Table for " << scanner.fname << endl << endl;
tframe = '*' + tframe + '*';
cout << tframe << endl;
}
printLine("Type", "Line", "Text", "Value");
cout << tframe << endl;
TokenPtr token;
while (scanner.Next()) {
token = scanner.Get();
string type = token->getName(),
line = to_string(token->line),
text = token->text,
value = token->getValue();
printLine(type, line, text, value);
cout << tframe << endl;
}
}
示例2: main
int main()
{
Database db;
// open the media library's database by passing the filenames of the data file and index file
// we have to tell the database not to create the table and index
// paths are hardcoded for this example.
Table *table = db.OpenTable("C:/Documents and Settings/benski/Application Data/Winamp/Plugins/ml/main.dat",
"C:/Documents and Settings/benski/Application Data/Winamp/Plugins/ml/main.idx", false, false);
cout << "number of records: " << table->GetRecordsCount() << endl;
// a Scanner lets us iterate through the records
Scanner *scanner = table->NewScanner(0);
// scan through each record
for (scanner->First();!scanner->Eof();scanner->Next())
{
time_t time; // time_t -> char * conversion routines require a pointer, so we'll allocate on the stack
/*
Scanner::GetFieldByName(char *) returns a "Field *"
we have to cast it to the appropriate subclass of Field * and hope for the best
using dynamic_cast<> and making sure it doesn't cast to 0 would be better
but this is just an example ...
*/
FilenameField *fileName = (FilenameField *)scanner->GetFieldByName("filename");
StringField *title = (StringField *)scanner->GetFieldByName("title");
StringField *artist= (StringField *)scanner->GetFieldByName("artist");
StringField *album= (StringField *)scanner->GetFieldByName("album");
IntegerField *year=(IntegerField *)scanner->GetFieldByName("year");
StringField *genre=(StringField *)scanner->GetFieldByName("genre");
StringField *comment=(StringField *)scanner->GetFieldByName("comment");
IntegerField *trackno=(IntegerField *)scanner->GetFieldByName("trackno");
IntegerField *length=(IntegerField *)scanner->GetFieldByName("length"); // in seconds
IntegerField *type=(IntegerField *)scanner->GetFieldByName("type");
IntegerField *lastUpdate=(IntegerField *)scanner->GetFieldByName("lastupd"); // it's an integer field but the data is actually a time_t
IntegerField *lastPlay=(IntegerField *)scanner->GetFieldByName("lastplay"); // time_t
IntegerField *rating=(IntegerField *)scanner->GetFieldByName("rating");
StringField *tuid2=(StringField *)scanner->GetFieldByName("tuid2"); // not sure what this is. maybe some kind of unique id
IntegerField *playCount=(IntegerField *)scanner->GetFieldByName("playCount");
IntegerField *fileTime=(IntegerField *)scanner->GetFieldByName("fileTime"); // time_t
IntegerField *fileSize=(IntegerField *)scanner->GetFieldByName("fileSize"); // in kilobytes
IntegerField *bitRate=(IntegerField *)scanner->GetFieldByName("bitRate"); // in kbps
/*
sometimes Scanner::GetFieldByName() returns 0 (usually if the field isn't present for this record)
so we need to check.
*/
if (fileName && fileName->GetString())
cout << "filename: " << fileName->GetString() << endl;
if (title && title->GetString())
cout << "title = "<< title->GetString() << endl;
if (artist && artist->GetString())
cout << "artist= "<< artist->GetString() << endl;
if (album && album->GetString())
cout << "album= "<< album->GetString() << endl;
if (year)
cout << "year="<< year->GetValue() << endl;
if (genre && genre->GetString())
cout << "genre="<< genre->GetString() << endl;
if (comment && comment->GetString())
cout << "comment="<< comment->GetString() << endl;
if (trackno)
cout << "trackno="<< trackno->GetValue() << endl;
if (length)
cout << "length="<< length->GetValue() << " seconds" << endl;
if (type)
cout << "type="<< type->GetValue() << endl;
if (lastUpdate)
{
time = lastUpdate->GetValue();
cout << "lastUpdate="<< asctime(localtime(&time));
}
if (lastPlay)
{
time = lastPlay->GetValue();
cout << "lastPlay="<< asctime(localtime(&time));
}
if (rating)
cout << "rating="<< rating->GetValue() << endl;
if (tuid2 && tuid2->GetString())
cout << "tuid2="<< tuid2->GetString() << endl;
if (playCount)
cout << "playCount="<< playCount->GetValue() << endl;
if (fileTime)
{
time = fileTime->GetValue();
cout << "fileTime="<< asctime(localtime(&time));
}
if (fileSize)
{
cout << "fileSize="<< fileSize->GetValue() << " kilobytes" << endl;
}
if (bitRate)
//.........这里部分代码省略.........