gpt4 book ai didi

c++ - 用C++解析文件并将其写入表格中的HTML

转载 作者:行者123 更新时间:2023-11-28 02:46:24 25 4
gpt4 key购买 nike

我需要将现有的日志文件转换成 HTML 报告。我在 Windows 平台上工作。以下是日志文件中日志消息的示例。

Example of log file

MyProcess1 16-06-14 8:32:50 8667 [Info] This is an information message

MyProcess2 16-06-14 8:32:57 9876 [Warn] This warning message

请注意日志文件的格式

MyProcess1 “空间” 16-06-14 “空间” 8:32:50 “空间” 8667 “空间” “ [信息] “空间”这个“空间”“空间”一个“空间” 信息“空间”消息

预期的 HTML 报告

enter image description here

此刻我想到了创建带有页眉、页脚标签和表格标签的 txt 文件。并在行首和行尾添加标签。但是我正在努力处理不同目标列的行中的那些标签。我们不能用标签替换所有空格,因为消息描述中有空格。您能否就以下尝试过的代码提出任何新方法或任何建议。

    #include "stdafx.h"    
#include <string>
#include <fstream>
#include <iostream>

int main()
{
std::ifstream inputFile("C:\\Test\\log.txt");
std::ofstream outputFile("C:\\Test\\Report.txt");

std::string line;
while (std::getline(inputFile, line))
outputFile << "<tr><td> " << line << " </tr></td>"<< std::endl;

return 0;
}

最佳答案

将数据读入某种反射(reflect)数据逻辑结构的结构/类。作为一种可能性(虽然肯定不是唯一的)使用重载 operator<<使用正确的标记写出数据。一般方法看起来像这样:

#include <string>
#include <sstream>
#include <vector>
#include <iostream>
#include <iterator>

std::string input = "MyProcess1 16-06-14 8:32:50 8667 [Info] This is an information message\nMyProcess2 16-06-14 8:32:57 9876 [Warn] This warning message";

struct cell {
cell(std::string const &data) :content(data) {}
std::string const &content;

friend std::ostream &operator<<(std::ostream &os, cell const &c) {
return os << "<td>" << c.content << "</td>";
}
};

struct row {
friend std::istream &operator>>(std::istream &is, row &r) {
is >> r.process >> r.date >> r.time >> r.process_id >> r.level;
return std::getline(is, r.msg);
}

friend std::ostream &operator<<(std::ostream &os, row const &r) {
return os << "<tr>" << cell(r.process) << cell(r.date) << cell(r.time) << cell(r.process_id) << cell(r.level) << cell(r.msg) << "</tr>";
}

private:
std::string process;
std::string date;
std::string time;
std::string process_id;
std::string level;
std::string msg;
};

struct table {
table(std::vector<row> const &r) :t(r) { }
std::vector<row> const &t;

friend std::ostream &operator<<(std::ostream &os, table const &t) {
os << "<table>";
std::copy(t.t.begin(), t.t.end(), std::ostream_iterator<row>(os));
return os << "</table>";
}
};

int main(){
std::istringstream rows(input);
std::vector<row> data{
std::istream_iterator<row>(rows),
std::istream_iterator<row>()
};

std::cout << table(data);
}

关于c++ - 用C++解析文件并将其写入表格中的HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com