2012-10-23 19 views
6

Chcę dane wyjściowe z mojego programu do pliku tekstowego. Oto przykład pokazujący jak działa to zrobić obecnie, gdzie również zawierać datę/godzinę (używam Windows):wyrównywanie danych wyjściowych

#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; 
} 

Jednak wyjście „info.txt” nie jest bardzo czytelny dla mnie jako użytkownika, ponieważ znacznik czasu i daty na końcach nie jest wyrównany. Oto wynik:

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

Moje pytanie brzmi, czy istnieje sposób wyrównania tej drugiej części?

Odpowiedz

7

Tak, <iomanip> nagłówek udostępnia manipulator setw, umożliwiając ustawienie szerokości każdego pola wyjściowego na ostream. Korzystanie setw manipulatora dla każdego wiersza zamiast znaków tabulacji zapewniłaby ściślejszą kontrolę nad wyjścia:

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

Aby wyrównać struny po lewej stronie, dodać left manipulator

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"; 
Powiązane problemy