const char* testData = "Hello 123 45.67 true World\nSecond Line\n";
std::cout << "=== 基本資料解析 ===" << std::endl;
if (reader.hasNextToken()) {
int len = reader.next(writer);
if (len > 0) {
std::cout << "字串: " << std::string(writer.pointer(), len) << std::endl;
}
}
if (reader.hasNextInteger()) {
int value;
if (reader.nextInteger(value)) {
std::cout << "整數: " << value << std::endl;
}
}
if (reader.hasNextFloat()) {
float value;
if (reader.nextFloat(value)) {
std::cout << "浮點數: " << value << std::endl;
}
}
if (reader.hasNextBoolean()) {
bool value;
if (reader.nextBoolean(value)) {
std::cout << "布林值: " << (value ? "true" : "false") << std::endl;
}
}
reader.skip(' ');
if (reader.hasNextToken()) {
int len = reader.next(writer);
if (len > 0) {
std::cout << "剩餘字串: " << std::string(writer.pointer(), len) << std::endl;
}
}
class CSVParser {
private:
public:
CSVParser(const char* csvData)
: reader(ufm::lang::Memory(const_cast<char*>(csvData), strlen(csvData))) {}
void parseCSV() {
std::cout << "\n=== CSV 解析範例 ===" << std::endl;
int lineNumber = 1;
std::cout << "第 " << lineNumber << " 行: ";
int lineLength = reader.
nextLine(lineWriter);
if (lineLength > 0) {
std::string line(lineWriter.pointer(), lineLength);
std::cout << line << std::endl;
parseFields(line);
}
lineNumber++;
}
}
private:
void parseFields(const std::string& line) {
);
int fieldIndex = 1;
while (fieldReader.hasNextToken()) {
int fieldLength = fieldReader.next(fieldWriter);
if (fieldLength > 0) {
std::string field(fieldWriter.pointer(), fieldLength);
std::cout << " 欄位 " << fieldIndex << ": " << field << std::endl;
}
fieldIndex++;
}
}
};
const char* csvData = "Name Age Salary\nJohn 25 50000\nJane 30 60000\n";
CSVParser csvParser(csvData);
csvParser.parseCSV();
class CommandParser {
private:
public:
CommandParser() : reader(512) {}
void processCommand(const char* command) {
std::cout << "\n=== 命令解析範例 ===" << std::endl;
std::cout << "處理命令: " << command << std::endl;
int cmdLength = reader.
next(cmdWriter);
if (cmdLength > 0) {
std::string cmdName(cmdWriter.pointer(), cmdLength);
std::cout << "命令名稱: " << cmdName << std::endl;
if (cmdName == "set") {
parseSetCommand();
} else if (cmdName == "get") {
parseGetCommand();
} else if (cmdName == "calc") {
parseCalcCommand();
} else {
std::cout << "未知命令: " << cmdName << std::endl;
}
}
}
}
private:
void parseSetCommand() {
std::cout << "解析 SET 命令參數:" << std::endl;
int varLength = reader.
next(varWriter);
if (varLength > 0) {
std::string varName(varWriter.pointer(), varLength);
std::cout << " 變數名稱: " << varName << std::endl;
}
}
int valueLength = reader.
next(valueWriter);
if (valueLength > 0) {
std::string value(valueWriter.pointer(), valueLength);
std::cout << " 數值: " << value << std::endl;
}
}
}
void parseGetCommand() {
std::cout << "解析 GET 命令參數:" << std::endl;
int varLength = reader.
next(varWriter);
if (varLength > 0) {
std::string varName(varWriter.pointer(), varLength);
std::cout << " 要獲取的變數: " << varName << std::endl;
}
}
}
void parseCalcCommand() {
std::cout << "解析 CALC 命令參數:" << std::endl;
int num1;
std::cout << " 數字1: " << num1 << std::endl;
}
}
int opLength = reader.
next(opWriter);
if (opLength > 0) {
std::string op(opWriter.pointer(), opLength);
std::cout << " 運算子: " << op << std::endl;
}
}
int num2;
std::cout << " 數字2: " << num2 << std::endl;
}
}
}
};
CommandParser cmdParser;
cmdParser.processCommand("set temperature 25");
cmdParser.processCommand("get humidity");
cmdParser.processCommand("calc 10 + 5");
class DataValidator {
public:
static bool validateNumberSequence(const char* data) {
);
std::cout << "\n=== 資料驗證範例 ===" << std::endl;
std::cout << "驗證數字序列: " << data << std::endl;
int numberCount = 0;
bool allValid = true;
int value;
std::cout << " 有效數字 " << (numberCount + 1)
<< ": " << value << std::endl;
numberCount++;
}
} else {
char ch;
if (!isspace(ch)) {
std::cout << " 跳過無效字元: '" << ch << "'" << std::endl;
allValid = false;
}
} else {
break;
}
}
}
std::cout << "總計找到 " << numberCount << " 個有效數字" << std::endl;
std::cout << "資料完全有效: " << (allValid ? "是" : "否") << std::endl;
return allValid && numberCount > 0;
}
};
DataValidator::validateNumberSequence("123 456 789");
DataValidator::validateNumberSequence("123 abc 456");
提供資料寫入功能的簡易實現類
Definition SimpleWriter.h:43
動態記憶體管理類別
Definition Memory.h:38
行資料讀取器,提供從緩衝區解析多種資料類型的功能。
Definition LineReader.h:343
bool hasNextToken(int limit=0)
判斷緩衝區是否有下一個 token。
Definition LineReader.h:462
int avariable(void) const
取得緩衝區可讀取的位元組數。
Definition LineReader.h:601
bool nextChar(char &result)
讀取下一個字元,並移除。
int hasNextLine(int limit=0)
判斷緩衝區是否有完整的一行(遇到換行符)。
bool hasNextInteger(int limit=0)
判斷緩衝區是否有可解析的整數。
int nextLine(ufm::lang::Appendable &appendable, int limit=0)
讀取下一行字串,並寫入指定 appendable。
int next(ufm::lang::Appendable &appendable, int limit=0)
讀取下一個字串,並寫入指定 appendable。
bool nextInteger(int &result, int limit=0)
讀取下一個整數,並移除。