保存一个结构向量到一个Tab分隔的文本文件
Save a Struct Vector into a Tab delimited Text File
我正在阅读一个2到4 gb的。txt文件,然后我操纵一些数据,并希望将我的结构向量保存为一个制表符分隔的。txt文件。我读了一些其他的问题,但我仍然不清楚我将如何在我的项目中做到这一点。
所以我的问题是:如何将Input
矢量结果保存为制表符分隔的。txt文件?
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
#include <cstdio>
using namespace std;
struct Input_Spec {
std::string Data;
std::string Ativo;
int Buy_Sell;
double Sequencia;
double Id;
int Event;
std::string Hr_Priority;
double Priority;
double Price;
double Qtd_Total;
double Qtd_Traded;
std::string Data_Order;
std::string Data_Time_Order;
std::string State_Of_Order;
std::string Condition_Of_Order;
double Broker;
};
void split(const std::string &s, char delim, std::string elems[])
{
std::stringstream ss(s);
std::string item;
long i = 0;
while (std::getline(ss, item, delim))
{
elems[i++] = item;
}
}
int main()
{
ifstream infile1("C:\Teste\Teste.txt");
ofstream output("output.txt");
string word;
string columns[16];
string line;
int row=0;
long c=0;
long filescol=0;
for (int i = 0; std::getline(infile1, word); ++i)
{
row++;
}
//cout<<row;
infile1.close();
ifstream infile("C:\Teste\Teste.txt");
vector<Input_Spec> Input(row);
while( getline(infile, line))
{
split(line,';', columns);
if (columns[0]!="")
{
Input[filescol].Data =columns[0];
Input[filescol].Ativo =columns[1];
Input[filescol].Buy_Sell = stoi(columns[2]);
Input[filescol].Sequencia = stod(columns[3]);
Input[filescol].Id = stod(columns[4]);
Input[filescol].Event = stoi(columns[5]);
Input[filescol].Hr_Priority = columns[6];
Input[filescol].Priority = stod(columns[7]);
Input[filescol].Price = stod(columns[8]);
Input[filescol].Qtd_Total = stod(columns[9]);
Input[filescol].Qtd_Traded = stod(columns[10]);
Input[filescol].Data_Order = columns[11];
Input[filescol].Data_Time_Order = columns[12];
Input[filescol].State_Of_Order = columns[13];
Input[filescol].Condition_Of_Order = columns[14];
Input[filescol].Broker = stod(columns[15]);
filescol++;
c++;
}
if (c>(999))
{
break;
infile.close();
return 0;
}
}
infile.close();
return 0;
}
这是一个片段:
ofstream output ("output.txt");
output << Input[filescol].Data << 't';
output << Input[filescol].Ativo << 't';
output << Input[filescol].Buy_Sell << 't';
//...
output << Input[filescol].Broker << 'n';
这就是你在说的吗?
首先,请让我给你一些关于代码的提示:你不需要计算输入文件的所有行,也不需要事先为vector
中的所有项保留内存。可通过push_back()
功能向vector
中添加项目。这为输入文件节省了一次迭代。
我把这个改进放到下面的main()
函数中。我还对@ThomasMatthews的答案进行了一些扩展,这样你就可以看到如何循环vector
以保存其中的数据:
int main()
{
ifstream infile("C:\Teste\Teste.txt");
ofstream output("C:\Teste\output.txt");
string line;
string columns[16];
vector<Input_Spec> Input;
Input_Spec oneInput;
while (getline(infile, line))
{
split(line, ';', columns);
if (!columns[0].empty())
{
oneInput.Data = columns[0];
oneInput.Ativo = columns[1];
oneInput.Buy_Sell = stoi(columns[2]);
oneInput.Sequencia = stod(columns[3]);
oneInput.Id = stod(columns[4]);
oneInput.Event = stoi(columns[5]);
oneInput.Hr_Priority = columns[6];
oneInput.Priority = stod(columns[7]);
oneInput.Price = stod(columns[8]);
oneInput.Qtd_Total = stod(columns[9]);
oneInput.Qtd_Traded = stod(columns[10]);
oneInput.Data_Order = columns[11];
oneInput.Data_Time_Order = columns[12];
oneInput.State_Of_Order = columns[13];
oneInput.Condition_Of_Order = columns[14];
oneInput.Broker = stod(columns[15]);
Input.push_back(oneInput);
}
}
// ----------------------
// Modify your data here.
// ----------------------
for(vector<Input_Spec>::const_iterator it = Input.begin(); it != Input.end(); it++)
{
output << it->Data << 't';
output << it->Ativo << 't';
output << it->Buy_Sell << 't';
output << it->Sequencia << 't';
output << it->Id << 't';
output << it->Event << 't';
output << it->Hr_Priority << 't';
output << it->Priority << 't';
output << it->Price << 't';
output << it->Qtd_Total << 't';
output << it->Qtd_Traded << 't';
output << it->Data_Order << 't';
output << it->Data_Time_Order << 't';
output << it->State_Of_Order << 't';
output << it->Condition_Of_Order << 't';
output << it->Broker << 'n';
}
output.close();
infile.close();
return 0;
}
我猜你的代码还可以做更多的改进,但这应该给你一个好的开始。
相关文章:
- C++试图读取一个文件并输出到另一个文本文件
- 将所有 *.txt 文件合并到一个文本文件中,其名称由用户使用 C++ 提供
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 检查一个文本文件中的单词是否在另一个文本文件 (C++) 中
- 我想使用 ofstream 在 cpp 中创建一个文本文件
- 检查一系列单词,形成一个文本文件,保存在字符串vector C 中
- 从一个文本文件加载多个 char 和 int 类型的数组
- 使用文本文件中的值进行计算并写入另一个文本文件
- 为什么当我在Visual c ++ studio 2010中运行应用程序时光标会转到最后一个文本框
- 将三个文本文件组合成一个文本文件,形成一个句子C++
- 控制台程序读取文本文件行,做Levenstein并输出一个文本文件
- 如何将XML文件拆分为多个XML,以便每个新文件只包含原始文件中的一个文本节点
- 读取文本文件中的多行并写入另一个文本文件
- 我把矢量从一个文本文件中归档,它不会变成一行.我该怎么做
- 如何将字符串的特定部分替换为另一个文本
- 在QT中制作了一个文本浏览器,但代码就像它不存在一样?
- 如何正确地将一个文本整数作为参数作为空指针进行传递,并使用其地址作为整数的实际值
- 给定一个单词和一个文本,返回文本中单词字谜的出现次数
- 给定一个单词和一个文本,我们需要返回字谜的出现次数
- 我正试图将一个过程的结果写入一个文本文件,我遇到的问题是列的对齐问题