擅长:python、mysql、java
<p>水平连接真的很简单。考虑到你知道C++,我很惊讶你使用MATLAB。以这种方式处理一GB左右的数据应该是几秒钟,而不是几天。</p>
<p>根据您的描述,实际上不需要CSV处理。最简单的方法是在RAM中完成。</p>
<pre><code>vector< vector<string> > data( num_files );
for( int i = 0; i < num_files; i++ ) {
ifstream input( filename[i] );
string line;
while( getline(input, line) ) data[i].push_back(line);
}
</code></pre>
<p>(执行明显的健全性检查,例如确保所有向量的长度相同…)</p>
<p>现在你拥有了一切,扔掉它:</p>
<pre><code>ofstream output("concatenated.csv");
for( int row = 0; row < num_rows; row++ ) {
for( int f = 1; f < num_files; f++ ) {
if( f == 0 ) output << ",";
output << data[f][row];
}
output << "\n";
}
</code></pre>
<p>如果你不想使用所有的内存,你可以一行一行地做。您应该能够同时打开所有文件,并将<code>ifstream</code>对象存储在vector/array/list中。在这种情况下,您只需从每个文件中一次读取一行并将其写入输出。</p>