c++ 我如何修改我的代码来导出(fstream)信息/输出到csv/文本文件而不是屏幕?

ecbunoof  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(113)

基本上我写了一个相当大的日历程序,我需要改变输出,使之成为一个文本文件/csv。有什么办法可以做到这一点吗?我可以把我的代码作为参考,但我问的是一个一般性的问题。

#include <iomanip>
#include <string>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int GetFirstDay(int year);
int dayNumber(int day, int month, int year);
void displayMonthDays(int month, int numDays, int year);

int main()
{   

    ofstream out_file("output.txt");

        int year, numDays;
        int month = 1;
        int dayOfWeek;
        cout << "Enter year: ";
        cin >> year;
        out_file << "\n\n";

        int First_Day = GetFirstDay(year);
        while (month <= 12) {
            switch (month) {
                //Body
            case 1:
                numDays = 31;
                out_file << "January" << endl;
                break;
            case 2:
                if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { numDays = 29; }
                else { numDays = 28; }
                out_file << "February" << endl;
                break;
            case 3:
                numDays = 31;
                out_file << "March" << endl;
                break;
            case 4:
                numDays = 30;
                out_file << "April" << endl;
                break;
            case 5:
                numDays = 31;
                out_file << "May" << endl;
                break;
            case 6:
                numDays = 30;
                out_file << "June" << endl;
                break;
            case 7:
                numDays = 31;
                out_file << "July" << endl;
                break;
            case 8:
                numDays = 31;
                out_file << "August" << endl;
                break;
            case 9:
                numDays = 30;
                out_file << "September" << endl;
                break;
            case 10:
                numDays = 31;
                out_file << "October" << endl;
                break;
            case 11:
                numDays = 31;
                out_file << "November" << endl;
                break;
            case 12:
                numDays = 31;
                out_file << "December" << endl;
                break;
            }
            displayMonthDays(month, numDays, year);
            out_file << endl;

            month++;
        }
   
    

}

// 1 2 3 4 5 6 7
// 8 9 ...
// dayOfWeek == 2
// _ 1 2 3 4 5 6
// dayOfWeek == 4
// _ _ _ 1 2 3 4
// d = j - dayOfWeek + 1;

void displayMonthDays(int month, int numDays, int year) {
    ofstream out_file("output.txt");

    int dayOfWeek = dayNumber(1, month, year);
    out_file << " S  M  T  W  T  F  S " << endl;
    out_file << "---------------------" << endl;
    for (int i = 0; i < 6; i++) {
        if ((i * 7 + 1 - dayOfWeek) > numDays) {
            break;
        }
        for (int j = i * 7 + 1; j < (i + 1) * 7 + 1; j++) {
            int d = j - dayOfWeek;
            if (d >= 1 && d <= numDays) {
                out_file << " " << setw(2) << left << d;
            }
            else {
                out_file << "   ";
            }
        }
        out_file << endl;
    }
}

int dayNumber(int day, int month, int year)
{

    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,
                    4, 6, 2, 4 };
    year -= month < 3;
    return (year + year / 4 - year / 100 +
        year / 400 + t[month - 1] + day) % 7;
}

int GetFirstDay(int year) {
    int century = (year - 1) / 100;
    int y = (year - 1) % 100;
    int weekday = (((29 - (2 * century) + y + (y / 4) + (century / 4)) % 7) + 7) % 7;
    return weekday;

}

我试过使用outfile方法,然后是outfile和myfile,第二次我这样做的时候,屏幕上什么也没有,但是在任何地方都看不到下载的文本文件,最后,我试着用outfile替换所有的cuts,如下所示:

out_file << "This will be in the .txt file" << endl;:

有什么想法我可以修改我的整个代码导出为csv/文本文件?谢谢!
编辑:我只是编辑了它来显示我最近的一次尝试。在这次尝试中,它没有将.txt文件发送到任何地方,所以我假设它还没有导出。

tpxzln5u

tpxzln5u1#

所以让我们从好东西开始

int main() {

ofstream out_file("output.txt");

    int year, numDays;
    int month = 1;
    int dayOfWeek;
    cout << "Enter year: ";
    cin >> year;
    out_file << "\n\n";
    ...

这很好,创建一个名为output.txt的文件并写入其中。
现在让我们看看哪里出了问题

void displayMonthDays(int month, int numDays, int year) {
    ofstream out_file("output.txt");
    int dayOfWeek = dayNumber(1, month, year);
    out_file << " S  M  T  W  T  F  S " << endl;
    ...

这里你正在创建另一个文件output.txt,所以你的程序试图同时创建多个文件output.txt,这是行不通的。
相反,您应该将已经创建的文件作为参数传递给displayMonthDays

void displayMonthDays(ostream& out, int month, int numDays, int year) {
    int dayOfWeek = dayNumber(1, month, year);
    out << " S  M  T  W  T  F  S " << endl;
    ...

(Here我已经调用了变量out,但它是一个变量,你可以随意调用它)。
然后在调用displayMonthDays时,从main传递参数

displayMonthDays(out_file, month, numDays, year);
        out_file << endl;

这个文件会出现在哪里我无法预测。这取决于你的平台。如果你想让它出现在一个特定的地方,那么你可以给予一个完整的名称,包括你想要创建它的目录。
最后要注意的是,您可以将此函数用于任何输出流,包括cout,所以如果您想返回使用cout,这是完全可以的。

displayMonthDays(cout, month, numDays, year);
        cout << endl;

相关问题