2012-10-23 22 views
6

Desidero inviare i dati dal mio programma a un file di testo. Ecco un esempio di lavoro che mostra come lo faccio attualmente, in cui includo anche la data/ora (sto facendo funzionare Windows):allineamento dell'output di ofstream

#include <iostream> 
#include <fstream> 
#include <time.h> 

using namespace std; 

int main() 
{ 

char dateStr [9]; 
char timeStr [9]; 

_strdate(dateStr); 
_strtime(timeStr); 

ofstream output("info.txt", ios::out); 
output << "Start time part 1 " << "\t" << timeStr << " on " << dateStr << "\n"; 
output << "Start time part 1000000 " << "\t" << timeStr << " on " << dateStr << "\n"; 
output.close(); 


return 0; 
} 

Tuttavia l'uscita di "info.txt" non è molto leggibile per me come un utente, dal momento che il timbro di data e ora alle estremità non è allineato. Ecco l'output:

Start time part 1 15:55:43 on 10/23/12 
Start time part 1000000  15:55:43 on 10/23/12 

La mia domanda è, c'è un modo per allineare l'ultima parte?

risposta

7

Sì, l'intestazione <iomanip> fornisce il manipolatore setw, che consente di impostare la larghezza di ciascun campo emesso su un ostream. Utilizzando setw manipolatore per ogni riga invece di caratteri di tabulazione fornirebbe maggiore controllo sull'output:

output << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl; 
output << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl; 

Per allineare stringhe sulla sinistra, aggiungere left manipolatore:

output << left << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl; 
output << left << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl; 
2
int max_align = 10; 
output << "Start time part 1 " << "\t" << timeStr 
<< std::string(max_align-timeStr.size(), " ") << " on " << dateStr << "\n";