Open Jaehui-Lee opened 3 years ago
표 출력 시, 표가 연결되게 출력하기
문제점 : 연결된 줄을 출력하기 위해서는 char형의 " - "과 " | "을 이용하여 표현할 수 없고 whline(win, ACS_HLINE), wvline(win, ACS_VLINE)을 이용하여야 한다. 기존 Table::print_table() 함수는 출력되는 모든 문자를 반환하여 excel.cpp에서 mvwprintw()을 통해 win에 문자열을 출력하였다. print_table()은 string형을 반환하여 ACS_HLINE과 같은 chtype은 받아들일 수 없다. 때문에 string형을 반환하는 print_table()로는 연결된 줄을 표현할 수 없다.
해결 : string형을 반환하는 Table::print_table() 함수를 직접 win에 출력하는 함수로 바꾼다.
table.h
public:
Table(int max_row_size, int max_col_size);
string print_table(); //previous
public:
Table(WINDOW* win, int max_row_size, int max_col_size);
void print_table(); //next
excel.cpp
mvwprintw(win, 0, 0, current_table->print_table().c_str()); //prev
current_table->print_table(); //next
table.cpp
void Table::print_table()
{
...
int cross_pos[max_col_size]; //represent x coordinate of cross
cross_pos[0] = 5;
for (int i = 0; i <= max_col_size; i++)
{
int max_len = max(2, col_max_wide[i]);
cross_pos[i + 1] = max_len + 3 + cross_pos[i];
}
for (int i = 0; i < max_row_size; i++)
{
// horizontal line
int x, y;
whline(win, ACS_HLINE, total_wide);
getyx(win, y, x); //return x ,y coordinates
for (int i = 0; i <= max_col_size; i++)
{
wmove(win, y, cross_pos[i]); //move cursor to a coordinate that a cross will be printed at
whline(win, ACS_PLUS, 1); //print the cross
}
wprintw(win, "\n");
// data line
wprintw(win, to_string(i + 1).c_str());
repeat_char(4-to_string(i+1).length(), " ");
for (int j = 0; j < max_col_size; j++)
{
if (col_max_wide[j])
{
int max_len = max(2, col_max_wide[j]);
int x, y;
string s = "";
if (data_table[i][j])
{
s = data_table[i][j]->stringify();
}
wprintw(win, " ");
wvline(win, ACS_VLINE, 1);
getyx(win, y, x);
wmove(win, y, x + 1);
wprintw(win, " ");
wprintw(win, s.c_str());
repeat_char(max_len-s.length(), " ");
}
}
wprintw(win, "\n");
}
}
void FuncCell::parse_function()
{
/*
...
similar to before
...
*/
calculate();
}
// Calculate the value of the parsed function
void FuncCell::calculate()
{
// Implemented
}
Add to_txt() function
Format with sheet function
void ExcelList::to_txt(string to)
{
ofstream writeFile(to.data());
if (writeFile.is_open())
{
writeFile << excel_count << endl;
list<Excel *>::iterator iter;
int i = 1;
for (iter = excelList.begin(); iter != excelList.end(); iter++)
{
(*iter)->to_txt(writeFile, i++);
}
}
writeFile.close();
}
void Excel::to_txt(ofstream& writeFile, int current_excel)
{
writeFile << current_excel << " ";
current_table->to_txt(writeFile);
}
void Table::to_txt(ofstream& writeFile)
{
// implemented
// output table data
// format : CellName DataType value ( value can be expression or function )
}
int main()
{
...
/*
Get filename
Call excelList.from_txt(filename)
Execute Excel
*/
...
}
bool ExcelList::from_txt(string from)
{
/*
File open and create window(excel)
*/
}
void Excel::from_txt(ifstream& readFile)
{
/*
Read data from file
Create data by type
*/
}
설명
추가 구현 사항 (11/12 회의)
TODO
[x] 표 출력 시, 표가 연결되게 출력하기
[x] 표에서 상하좌우 스크롤 기능 구현
[x] 엑셀 함수 구현
[x] txt 파일로 저장
[x] 파일 열기
[x] sheet number 표시