逐行将文件输出到Excel

时间:2015-10-12 23:33:54

标签: c++ excel csv

用户输入以空格分隔的字符串。代码运行一个排列并将文件导出到.csv文件中。问题是C ++输出窗口中的代码输出与.csv文件中的代码格式不匹配。 .csv文件中的代码是C ++输出窗口的一个大字符串。 .csv输出不考虑代码输出中的单独行。

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
int main() {
    cout << "Type in string (separate by spaces).\n" << endl;
    int r;
    string t;
    getline(cin, t);
    /* Put the line in a stringstream and extract word by word back */
    istringstream iss(t);
    string words;
    vector<string> n;
    while (iss >> words) {
        n.push_back(words);
    }
    std::ofstream output_file;
    output_file.open("C:/Users/UserName/Documents/output2.csv");
    cout << "\n";
    int ctr;
    for (ctr = 0; ctr < n.size(); ctr++){
            do {
                for (auto i = n.begin(); i != n.end() - ctr; ++i)
                std::cout << *i << ' ';
                cout << endl;
                for (auto i = n.begin(); i != n.end() - ctr; ++i)
                output_file << *i << ' ';
            } while (std::next_permutation(n.begin(), n.end()));
        }
    output_file.close();
    system("pause");
}

以下是C ++输出窗口的输出:

I like strawberries

I like strawberries
I strawberries like
like I strawberries
like strawberries I
strawberries I like
strawberries like I
I like
I strawberries
like I
like strawberries
strawberries I
strawberries like
I
I
like
like
strawberries
strawberries

这是.csv Excel文件输出(全部在单元格a1中):

I like strawberries I strawberries like like I strawberries like strawberries I strawberries I like strawberries like I I like I strawberries like I like strawberries strawberries I strawberries like I I like like strawberries strawberries

我的最终目标是让.csv文件中的C ++输出窗口相同。当我手动将代码复制并粘贴到.csv文件中时,这种方法很有效,但这对于大字符串来说是不切实际的。

1 个答案:

答案 0 :(得分:0)

您的问题是在正确的位置缺少换行符。你需要写出当前排列的所有单词,然后(当你完成了&#34;句子&#34;)一个新行,将那个单词与下一个单词分开。

只写出完整单词集的排列(并且您的测试用例是硬编码的)的简化版本看起来像这样:

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;
int main() {
    istringstream iss("I like strawberries");

    vector<string> n { std::istream_iterator<std::string>(iss), { } };

    std::ofstream output_file("c:/c/source/output2.csv");

    std::sort(n.begin(), n.end());

    do {
        for (auto const &s : n)
            output_file << s << ' ';
        output_file << "\n";
    } while (std::next_permutation(n.begin(), n.end()));
}

请注意添加对std::sort的调用。这是std::next_permutation在正确的时间返回false所必需的(当下一个排列将项目按排序顺序排列时,它返回false,因此当且仅当它被排除时,您将获得所有排列在第一次调用之前按排序顺序)。碰巧的是,您的测试用例开始排序,但一般情况下您不能依赖它。

使用Excel快速测试显示这个开头有一个&#34;句子&#34;每个细胞。