C++ 命令行工具:合并具有相同列名的多个数据集
#include
// Function to split a string by delimiter std::vectorstd::string split(const std::string& str, char delimiter) { std::vectorstd::string tokens; std::string token; std::istringstream tokenStream(str); while (std::getline(tokenStream, token, delimiter)) { tokens.push_back(token); } return tokens; }
int main(int argc, char* argv[]) { if (argc < 4) { std::cout << "Usage: " << argv[0] << " <output_file> <input_file1> <input_file2> ..." << std::endl; return 1; }
std::string outputFile = argv[1];
std::map<std::string, std::vector<std::string>> data; // Map to store column names and their corresponding values
// Read input files
for (int i = 2; i < argc; i++) {
std::ifstream inputFile(argv[i]);
std::string line;
std::getline(inputFile, line); // Read header line
// Split header line into column names
std::vector<std::string> columns = split(line, ',');
// Read data lines
while (std::getline(inputFile, line)) {
std::vector<std::string> values = split(line, ',');
// Store values in the map based on column names
for (int j = 0; j < columns.size(); j++) {
data[columns[j]].push_back(values[j]);
}
}
inputFile.close();
}
// Write merged data to output file
std::ofstream outputFileStream(outputFile);
for (const auto& column : data) {
outputFileStream << column.first << ",";
}
outputFileStream << std::endl;
// Write values for each column
int numRows = data.begin()->second.size();
for (int i = 0; i < numRows; i++) {
for (const auto& column : data) {
outputFileStream << column.second[i] << ",";
}
outputFileStream << std::endl;
}
outputFileStream.close();
std::cout << "Data merged successfully. Output file: " << outputFile << std::endl;
return 0;
}
使用该程序的命令行示例:
./merge_datasets output.csv input1.csv input2.csv input3.csv
其中,output.csv是合并后的输出文件名,input1.csv、input2.csv、input3.csv是要合并的输入文件名。合并后的数据将保存在output.csv中。
请注意,该程序假设输入文件的第一行是列名,数据以逗号分隔。如果数据文件的格式不同,可能需要对代码进行适当的修改。
原文地址: https://www.cveoy.top/t/topic/pZed 著作权归作者所有。请勿转载和采集!