本文整理汇总了C++中TLineReader类的典型用法代码示例。如果您正苦于以下问题:C++ TLineReader类的具体用法?C++ TLineReader怎么用?C++ TLineReader使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TLineReader类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ParseAirfieldDetails
/**
* Parses the data provided by the airfield details file handle
*/
static void
ParseAirfieldDetails(Waypoints &way_points, TLineReader &reader,
OperationEnvironment &operation)
{
tstring details;
std::vector<tstring> files_external, files_embed;
TCHAR name[201];
const TCHAR *filename;
name[0] = 0;
bool in_details = false;
int i;
const long filesize = std::max(reader.GetSize(), 1l);
operation.SetProgressRange(100);
TCHAR *line;
while ((line = reader.ReadLine()) != NULL) {
if (line[0] == _T('[')) { // Look for start
if (in_details)
SetAirfieldDetails(way_points, name, details, files_external,
files_embed);
details.clear();
files_external.clear();
files_embed.clear();
// extract name
for (i = 1; i < 201; i++) {
if (line[i] == _T(']'))
break;
name[i - 1] = line[i];
}
name[i - 1] = 0;
in_details = true;
operation.SetProgressPosition(reader.Tell() * 100 / filesize);
} else if ((filename =
StringAfterPrefixCI(line, _T("image="))) != NULL) {
files_embed.emplace_back(filename);
} else if ((filename =
StringAfterPrefixCI(line, _T("file="))) != NULL) {
#ifdef ANDROID
files_external.emplace_back(filename);
#endif
} else {
// append text to details string
if (!StringIsEmpty(line)) {
details += line;
details += _T('\n');
}
}
}
if (in_details)
SetAirfieldDetails(way_points, name, details, files_external, files_embed);
}
开发者ID:Adrien81,项目名称:XCSoar,代码行数:63,代码来源:WaypointDetailsReader.cpp
示例2: LoadChecklist
static void
LoadChecklist()
{
nLists = 0;
free(ChecklistText[0]);
ChecklistText[0] = NULL;
free(ChecklistTitle[0]);
ChecklistTitle[0] = NULL;
TLineReader *reader = OpenDataTextFile(_T(XCSCHKLIST));
if (reader == NULL) {
addChecklist(_("No checklist loaded"),_("Create xcsoar-checklist.txt\n"));
return;
}
TCHAR Details[MAXDETAILS];
TCHAR Name[100];
bool inDetails = false;
int i;
Details[0] = 0;
Name[0] = 0;
TCHAR *TempString;
while ((TempString = reader->read()) != NULL) {
// Look for start
if (TempString[0] == '[') {
if (inDetails) {
addChecklist(Name, Details);
Details[0] = 0;
Name[0] = 0;
}
// extract name
for (i = 1; i < MAXTITLE; i++) {
if (TempString[i] == ']')
break;
Name[i - 1] = TempString[i];
}
Name[i - 1] = 0;
inDetails = true;
} else {
// append text to details string
_tcsncat(Details, TempString, MAXDETAILS - 2);
_tcscat(Details, _T("\n"));
// TODO code: check the string is not too long
}
}
delete reader;
if (inDetails) {
addChecklist(Name, Details);
}
}
开发者ID:damianob,项目名称:xcsoar,代码行数:59,代码来源:dlgChecklist.cpp
示例3: DetectFileType
bool
AirspaceParser::Parse(TLineReader &reader, OperationEnvironment &operation)
{
bool ignore = false;
// Create and init ProgressDialog
operation.SetProgressRange(1024);
const long file_size = reader.GetSize();
TempAirspaceType temp_area;
AirspaceFileType filetype = AFT_UNKNOWN;
TCHAR *line;
// Iterate through the lines
for (unsigned line_num = 1; (line = reader.ReadLine()) != NULL; line_num++) {
// Skip empty line
if (StringIsEmpty(line))
continue;
if (filetype == AFT_UNKNOWN) {
filetype = DetectFileType(line);
if (filetype == AFT_UNKNOWN)
continue;
}
// Parse the line
if (filetype == AFT_OPENAIR)
if (!ParseLine(airspaces, line, temp_area) &&
!ShowParseWarning(line_num, line, operation))
return false;
if (filetype == AFT_TNP)
if (!ParseLineTNP(airspaces, line, temp_area, ignore) &&
!ShowParseWarning(line_num, line, operation))
return false;
// Update the ProgressDialog
if ((line_num & 0xff) == 0)
operation.SetProgressPosition(reader.Tell() * 1024 / file_size);
}
if (filetype == AFT_UNKNOWN) {
operation.SetErrorMessage(_("Unknown airspace filetype"));
return false;
}
// Process final area (if any)
if (!temp_area.points.empty())
temp_area.AddPolygon(airspaces);
return true;
}
开发者ID:DRIZO,项目名称:xcsoar,代码行数:54,代码来源:AirspaceParser.cpp
示例4: return
bool
WaypointReaderCompeGPS::VerifyFormat(TLineReader &reader) const
{
TCHAR* line = reader.read();
if (line == NULL)
return false;
// Ignore optional line with encoding information
if (line[0] == _T('B') && line[1] == _T(' '))
if ((line = reader.read()) == NULL)
return false;
return (_tcsstr(line, _T("G WGS 84")) == line);
}
开发者ID:mobotics,项目名称:XCSoar,代码行数:14,代码来源:WaypointReaderCompeGPS.cpp
示例5: StringStartsWith
bool
WaypointReaderCompeGPS::VerifyFormat(TLineReader &reader)
{
const TCHAR *line = reader.ReadLine();
if (line == NULL)
return false;
// Ignore optional line with encoding information
if (StringStartsWith(line, _T("B ")))
if ((line = reader.ReadLine()) == NULL)
return false;
return StringStartsWith(line, _T("G WGS 84"));
}
开发者ID:j-konopka,项目名称:XCSoar-TE,代码行数:14,代码来源:WaypointReaderCompeGPS.cpp
示例6: ParseAirfieldDetails
/**
* Parses the data provided by the airfield details file handle
*/
static void
ParseAirfieldDetails(Waypoints &way_points, TLineReader &reader)
{
tstring Details;
TCHAR Name[201];
Name[0] = 0;
bool inDetails = false;
int i;
long filesize = std::max(reader.size(), 1l);
ProgressGlue::SetRange(100);
TCHAR *TempString;
while ((TempString = reader.read()) != NULL) {
if (TempString[0] == '[') { // Look for start
if (inDetails)
SetAirfieldDetails(way_points, Name, Details);
Details.clear();
// extract name
for (i = 1; i < 201; i++) {
if (TempString[i] == ']')
break;
Name[i - 1] = TempString[i];
}
Name[i - 1] = 0;
inDetails = true;
ProgressGlue::SetValue(reader.tell() * 100 / filesize);
} else {
// append text to details string
if (!string_is_empty(TempString)) {
Details += TempString;
Details += _T('\n');
}
}
}
if (inDetails) {
SetAirfieldDetails(way_points, Name, Details);
Details.clear();
}
}
开发者ID:Mrdini,项目名称:XCSoar,代码行数:51,代码来源:AirfieldDetails.cpp
示例7: while
void
StatusMessageList::LoadFile(TLineReader &reader)
{
int ms; // Found ms for delay
const TCHAR **location; // Where to put the data
bool some_data; // Did we find some in the last loop...
// Init first entry
_init_Status(StatusMessageData_Size);
some_data = false;
/* Read from the file */
TCHAR *buffer;
const TCHAR *key, *value;
while ((StatusMessageData_Size < MAXSTATUSMESSAGECACHE) &&
(buffer = reader.read()) != NULL) {
// Check valid line? If not valid, assume next record (primative, but works ok!)
if (*buffer == _T('#') || !parse_assignment(buffer, key, value)) {
// Global counter (only if the last entry had some data)
if (some_data) {
StatusMessageData_Size++;
some_data = false;
_init_Status(StatusMessageData_Size);
}
} else {
location = NULL;
if (_tcscmp(key, _T("key")) == 0) {
some_data = true; // Success, we have a real entry
location = &StatusMessageData[StatusMessageData_Size].key;
} else if (_tcscmp(key, _T("sound")) == 0) {
StatusMessageData[StatusMessageData_Size].doSound = true;
location = &StatusMessageData[StatusMessageData_Size].sound;
} else if (_tcscmp(key, _T("delay")) == 0) {
TCHAR *endptr;
ms = _tcstol(value, &endptr, 10);
if (endptr > value)
StatusMessageData[StatusMessageData_Size].delay_ms = ms;
} else if (_tcscmp(key, _T("hide")) == 0) {
if (_tcscmp(value, _T("yes")) == 0)
StatusMessageData[StatusMessageData_Size].doStatus = false;
}
// Do we have somewhere to put this &&
// is it currently empty ? (prevent lost at startup)
if (location && (_tcscmp(*location, _T("")) == 0)) {
// TODO code: this picks up memory lost from no entry, but not duplicates - fix.
if (*location) {
// JMW fix memory leak
free((void*)*location);
}
*location = StringMallocParse(value);
}
}
}
// How many we really got (blank next just in case)
StatusMessageData_Size++;
_init_Status(StatusMessageData_Size);
}
开发者ID:Plantain,项目名称:XCSoar,代码行数:60,代码来源:StatusMessage.cpp
示例8: ParseLine
void
WaypointReaderBase::Parse(Waypoints &way_points, TLineReader &reader,
OperationEnvironment &operation)
{
const long filesize = std::max(reader.GetSize(), 1l);
operation.SetProgressRange(100);
// Read through the lines of the file
TCHAR *line;
for (unsigned i = 0; (line = reader.ReadLine()) != nullptr; i++) {
// and parse them
ParseLine(line, i, way_points);
if ((i & 0x3f) == 0)
operation.SetProgressPosition(reader.Tell() * 100 / filesize);
}
}
开发者ID:CnZoom,项目名称:XcSoarPull,代码行数:17,代码来源:WaypointReaderBase.cpp
示例9: StringStartsWith
bool
WaypointReaderOzi::VerifyFormat(TLineReader &reader)
{
const TCHAR *line = reader.ReadLine();
if (line == nullptr)
return false;
return StringStartsWith(line, _T("OziExplorer Waypoint File"));
}
开发者ID:kwtskran,项目名称:XCSoar,代码行数:9,代码来源:WaypointReaderOzi.cpp
示例10: StringStartsWith
bool
WaypointReaderFS::VerifyFormat(TLineReader &reader)
{
const TCHAR *line = reader.ReadLine();
if (line == nullptr)
return false;
return StringStartsWith(line, _T("$FormatUTM")) ||
StringStartsWith(line, _T("$FormatGEO"));
}
开发者ID:Turbo87,项目名称:XCSoar-TE,代码行数:10,代码来源:WaypointReaderFS.cpp
示例11: StringStartsWith
bool
WaypointReaderFS::VerifyFormat(TLineReader &reader)
{
TCHAR* line = reader.read();
if (line == NULL)
return false;
return StringStartsWith(line, _T("$FormatUTM")) ||
StringStartsWith(line, _T("$FormatGEO"));
}
开发者ID:damianob,项目名称:xcsoar,代码行数:10,代码来源:WaypointReaderFS.cpp
示例12: LoadSecondaryFile
static void
LoadSecondaryFile(TLineReader &reader)
{
TCHAR *line;
while ((line = reader.read()) != NULL) {
TCHAR *endptr;
FlarmId id;
id.parse(line, &endptr);
if (endptr > line && endptr[0] == _T('=') && endptr[1] != _T('\0')) {
TCHAR *Name = endptr + 1;
TrimRight(Name);
if (!FlarmDetails::AddSecondaryItem(id, Name))
break; // cant add anymore items !
}
}
}
开发者ID:joachimwieland,项目名称:xcsoar-jwieland,代码行数:16,代码来源:FlarmDetails.cpp
示例13: LoadFlarmNameFile
void
LoadFlarmNameFile(TLineReader &reader, FlarmNameDatabase &db)
{
TCHAR *line;
while ((line = reader.ReadLine()) != NULL) {
TCHAR *endptr;
FlarmId id = FlarmId::Parse(line, &endptr);
if (!id.IsDefined())
/* ignore malformed records */
continue;
if (endptr > line && endptr[0] == _T('=') && endptr[1] != _T('\0')) {
TCHAR *Name = endptr + 1;
TrimRight(Name);
if (!db.Set(id, Name))
break; // cant add anymore items !
}
}
}
开发者ID:DRIZO,项目名称:xcsoar,代码行数:19,代码来源:NameFile.cpp
示例14: while
void
StatusMessageList::LoadFile(TLineReader &reader)
{
// Init first entry
StatusMessage current;
current.Clear();
/* Read from the file */
TCHAR *buffer;
const TCHAR *key, *value;
while ((buffer = reader.ReadLine()) != NULL) {
// Check valid line? If not valid, assume next record (primative, but works ok!)
if (*buffer == _T('#') || !parse_assignment(buffer, key, value)) {
// Global counter (only if the last entry had some data)
if (!current.IsEmpty()) {
list.append(current);
current.Clear();
if (list.full())
break;
}
} else {
if (_tcscmp(key, _T("key")) == 0) {
if (current.key == NULL)
current.key = UnescapeBackslash(value);
} else if (_tcscmp(key, _T("sound")) == 0) {
if (current.sound == NULL)
current.sound = UnescapeBackslash(value);
} else if (_tcscmp(key, _T("delay")) == 0) {
TCHAR *endptr;
unsigned ms = ParseUnsigned(value, &endptr);
if (endptr > value)
current.delay_ms = ms;
} else if (_tcscmp(key, _T("hide")) == 0) {
if (_tcscmp(value, _T("yes")) == 0)
current.visible = false;
}
}
}
if (!current.IsEmpty())
list.append(current);
}
开发者ID:MindMil,项目名称:XCSoar,代码行数:43,代码来源:StatusMessage.cpp
示例15: ReadAirspace
bool
ReadAirspace(Airspaces &airspace_database, TLineReader &reader)
{
int LineCount = 0;
bool ignore = false;
// Create and init ProgressDialog
ProgressGlue::SetRange(1024);
long file_size = reader.size();
TempAirspaceType temp_area;
asFileType filetype = ftUnknown;
TCHAR *line;
TCHAR *comment;
// Iterate through the lines
while ((line = reader.read()) != NULL) {
// Increase line counter
LineCount++;
// Strip comments
comment = _tcschr(line, _T('*'));
if (comment != NULL)
*comment = _T('\0');
// Skip empty line
if (string_is_empty(line))
continue;
if (filetype == ftUnknown) {
filetype = DetectFileType(line);
if (filetype == ftUnknown)
continue;
}
// Parse the line
if (filetype == ftOpenAir)
if (!ParseLine(airspace_database, line, temp_area) &&
!ShowParseWarning(LineCount, line))
return false;
if (filetype == ftTNP)
if (!ParseLineTNP(airspace_database, line, temp_area, ignore) &&
!ShowParseWarning(LineCount, line))
return false;
// Update the ProgressDialog
if ((LineCount & 0xff) == 0)
ProgressGlue::SetValue(reader.tell() * 1024 / file_size);
}
if (LineCount == 0)
return false;
if (filetype == ftUnknown) {
MessageBoxX(_("Unknown Filetype."), _("Airspace"), MB_OK);
return false;
}
// Process final area (if any)
if (!temp_area.Waiting)
temp_area.AddPolygon(airspace_database);
return true;
}
开发者ID:Mrdini,项目名称:XCSoar,代码行数:66,代码来源:AirspaceParser.cpp
示例16: ParseInputFile
void
ParseInputFile(InputConfig &config, TLineReader &reader)
{
// TODO code - Safer sizes, strings etc - use C++ (can scanf restrict length?)
// Multiple modes (so large string)
EventBuilder current;
current.clear();
int line = 0;
// Read from the file
TCHAR *buffer;
while ((buffer = reader.ReadLine()) != NULL) {
TrimRight(buffer);
line++;
const TCHAR *key, *value;
// experimental: if the first line is "#CLEAR" then the whole default config is cleared
// and can be overwritten by file
if (line == 1 && StringIsEqual(buffer, _T("#CLEAR"))) {
config.SetDefaults();
} else if (buffer[0] == _T('\0')) {
// Check valid line? If not valid, assume next record (primative, but works ok!)
// General checks before continue...
current.commit(config, line);
// Clear all data.
current.clear();
} else if (StringIsEmpty(buffer) || buffer[0] == _T('#')) {
// Do nothing - we probably just have a comment line
// NOTE: Do NOT display buffer to user as it may contain an invalid stirng !
} else if (parse_assignment(buffer, key, value)) {
if (StringIsEqual(key, _T("mode"))) {
current.mode = value;
} else if (StringIsEqual(key, _T("type"))) {
current.type = value;
} else if (StringIsEqual(key, _T("data"))) {
current.data = value;
} else if (StringIsEqual(key, _T("event"))) {
if (_tcslen(value) < 256) {
TCHAR d_event[256] = _T("");
TCHAR d_misc[256] = _T("");
int ef;
#if defined(__BORLANDC__)
memset(d_event, 0, sizeof(d_event));
memset(d_misc, 0, sizeof(d_event));
if (_tcschr(value, ' ') == NULL) {
_tcscpy(d_event, value);
} else {
#endif
ef = _stscanf(value, _T("%[^ ] %[A-Za-z0-9 \\/().,]"), d_event,
d_misc);
#if defined(__BORLANDC__)
}
#endif
if ((ef == 1) || (ef == 2)) {
// TODO code: Consider reusing existing identical events
pt2Event event = InputEvents::findEvent(d_event);
if (event) {
TCHAR *allocated = UnescapeBackslash(d_misc);
current.event_id = config.AppendEvent(event, allocated,
current.event_id);
/* not freeing the string, because
InputConfig::AppendEvent() stores the string point
without duplicating it; strictly speaking, this is a
memory leak, but the input file is only loaded once
at startup, so this is acceptable; in return, we
don't have to duplicate the hard-coded defaults,
which saves some memory */
//free(allocated);
} else {
LogStartUp(_T("Invalid event type: %s at %i"), d_event, line);
}
} else {
LogFormat("Invalid event type at %i", line);
}
}
} else if (StringIsEqual(key, _T("label"))) {
current.label = value;
} else if (StringIsEqual(key, _T("location"))) {
current.location = ParseUnsigned(value);
} else {
LogStartUp(_T("Invalid key/value pair %s=%s at %i"), key, value, line);
}
} else {
LogFormat("Invalid line at %i", line);
}
//.........这里部分代码省略.........
开发者ID:Tjeerdm,项目名称:XCSoarDktjm,代码行数:101,代码来源:InputParser.cpp
示例17: ParseInputFile
void
ParseInputFile(InputConfig &config, TLineReader &reader)
{
// TODO code - Safer sizes, strings etc - use C++ (can scanf restrict length?)
TCHAR *new_label = NULL;
// Init first entry
// Did we find some in the last loop...
bool some_data = false;
// Multiple modes (so large string)
TCHAR d_mode[1024] = _T("");
TCHAR d_type[256] = _T("");
TCHAR d_data[256] = _T("");
unsigned event_id = 0;
TCHAR d_label[256] = _T("");
int d_location = 0;
TCHAR d_event[256] = _T("");
TCHAR d_misc[256] = _T("");
int line = 0;
// Read from the file
// TODO code: What about \r - as in \r\n ?
// TODO code: Note that ^# does not allow # in key - might be required (probably not)
// Better way is to separate the check for # and the scanf
TCHAR *buffer;
while ((buffer = reader.read()) != NULL) {
TrimRight(buffer);
line++;
const TCHAR *key, *value;
// experimental: if the first line is "#CLEAR" then the whole default config is cleared
// and can be overwritten by file
if (line == 1 && _tcscmp(buffer, _T("#CLEAR")) == 0) {
config.clear_all_events();
} else if (buffer[0] == _T('\0')) {
// Check valid line? If not valid, assume next record (primative, but works ok!)
// General checks before continue...
if (some_data && (d_mode != NULL) && (_tcscmp(d_mode, _T("")) != 0)) {
TCHAR *token;
// For each mode
token = _tcstok(d_mode, _T(" "));
// General errors - these should be true
assert(d_location >= 0);
assert(d_location < 1024); // Scott arbitrary limit
assert(d_mode != NULL);
assert(d_type != NULL);
assert(d_label != NULL);
// These could indicate bad data - thus not an ASSERT (debug only)
// assert(_tcslen(d_mode) < 1024);
// assert(_tcslen(d_type) < 1024);
// assert(_tcslen(d_label) < 1024);
while (token != NULL) {
// All modes are valid at this point
int mode_id = config.make_mode(token);
assert(mode_id >= 0);
// Make label event
// TODO code: Consider Reuse existing entries...
if (d_location > 0) {
// Only copy this once per object - save string space
if (!new_label) {
new_label = StringMallocParse(d_label);
}
config.append_menu(mode_id, new_label, d_location, event_id);
}
// Make key (Keyboard input)
// key - Hardware key or keyboard
if (_tcscmp(d_type, _T("key")) == 0) {
// Get the int key (eg: APP1 vs 'a')
unsigned key = InputEvents::findKey(d_data);
if (key > 0)
config.Key2Event[mode_id][key] = event_id;
else
LogStartUp(_T("Invalid key data: %s at %i"), d_data, line);
// Make gce (Glide Computer Event)
// GCE - Glide Computer Event
} else if (_tcscmp(d_type, _T("gce")) == 0) {
// Get the int key (eg: APP1 vs 'a')
int key = InputEvents::findGCE(d_data);
if (key >= 0)
config.GC2Event[mode_id][key] = event_id;
else
LogStartUp(_T("Invalid GCE data: %s at %i"), d_data, line);
// Make ne (NMEA Event)
// NE - NMEA Event
} else if (_tcscmp(d_type, _T("ne")) == 0) {
//.........这里部分代码省略.........
开发者ID:galippi,项目名称:xcsoar,代码行数:101,代码来源:InputParser.cpp
注:本文中的TLineReader类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论