当前位置: 首页>>代码示例>>C++>>正文


C++ Scanner::Next方法代码示例

本文整理汇总了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;
   }
}
开发者ID:koninka,项目名称:pascal-complier,代码行数:23,代码来源:printer.cpp

示例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)
//.........这里部分代码省略.........
开发者ID:ZeroTheSavior,项目名称:remotecontrol-for-winamp,代码行数:101,代码来源:mlExplorer.cpp


注:本文中的Scanner::Next方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。