IPBS_Station/Tools/CText.h
2025-09-05 08:44:30 +08:00

106 lines
2.8 KiB
C++

#ifndef WEBDEPLOY_CTEXT_H
#define WEBDEPLOY_CTEXT_H
#pragma once
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#define MAX_LINE_LENGTH 1024
#define MAX_CONFIGS 100
namespace CText{
typedef struct {
char key[MAX_LINE_LENGTH];
char value[MAX_LINE_LENGTH];
bool isValid;
} ConfigPair;
inline int parseLine(char *line, ConfigPair *pair) {
char *token;
token = strtok(line, ":");
memset(pair->value, 0, sizeof(pair->value));
memset(pair->key, 0, sizeof(pair->key));
if (token == nullptr) {
return 0; // Line is invalid
}
strcpy(pair->key, token);
token = strtok(nullptr, "\n");
if (token == nullptr) {
return 0; // No value found
}
strcpy(pair->value, token);
pair->isValid = true;
return 1;
}
inline void trim(char *str) {
char *end;
// Trim leading space
while (isspace((unsigned char)*str)) str++;
if (*str == 0) { // All spaces?
return;
}
// Trim trailing space
end = str + strlen(str) - 1;
while (end > str && isspace((unsigned char)*end)) end--;
// Write new null terminator character
end[1] = '\0';
}
inline bool ReadConfig(ConfigPair* configs,const char * filePath){
FILE *fp;
char line[MAX_LINE_LENGTH] = {0};
int configCount = 0;
fp = fopen(filePath, "r");
if (fp == nullptr) {
perror("Failed to open file");
return false;
}
while (fgets(line, MAX_LINE_LENGTH, fp)) {
// Trim leading and trailing whitespace
trim(line);
// Skip empty lines or comments
if (line[0] == '\0' || line[0] == '#') {
continue;
}
configs[configCount].isValid = false;
if (parseLine(line, &configs[configCount])) {
configCount++;
}
}
fclose(fp);
return true;
}
inline std::map<CCString,CCString> ReadConfig(const char * filePath){
std::map<CCString,CCString> config;
FILE *fp;
char line[MAX_LINE_LENGTH] = {0};
ConfigPair configs;
fp = fopen(filePath, "r");
if (fp == nullptr) {
perror("Failed to open file");
return {};
}
while (fgets(line, MAX_LINE_LENGTH, fp)) {
// Trim leading and trailing whitespace
trim(line);
// Skip empty lines or comments
if (line[0] == '\0' || line[0] == '#') {
continue;
}
configs.isValid = false;
if (parseLine(line, &configs)) {
config[configs.key] = configs.value;
}
}
fclose(fp);
return config;
}
}
#endif