基本上我写了一个相当大的日历程序,我需要改变输出,使之成为一个文本文件/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文件发送到任何地方,所以我假设它还没有导出。
1条答案
按热度按时间tpxzln5u1#
所以让我们从好东西开始
这很好,创建一个名为output.txt的文件并写入其中。
现在让我们看看哪里出了问题
这里你正在创建另一个文件output.txt,所以你的程序试图同时创建多个文件output.txt,这是行不通的。
相反,您应该将已经创建的文件作为参数传递给
displayMonthDays
。(Here我已经调用了变量
out
,但它是一个变量,你可以随意调用它)。然后在调用
displayMonthDays
时,从main
传递参数这个文件会出现在哪里我无法预测。这取决于你的平台。如果你想让它出现在一个特定的地方,那么你可以给予一个完整的名称,包括你想要创建它的目录。
最后要注意的是,您可以将此函数用于任何输出流,包括
cout
,所以如果您想返回使用cout
,这是完全可以的。