我碰到了一堵磚牆,試圖格式化我的一個文件。我有一個我已格式化的文件,如下所示:格式化文件 - C++
0 1 2 3 4 5
0.047224 0.184679 -0.039316 -0.008939 -0.042705 -0.014458
-0.032791 -0.039254 0.075326 -0.000667 -0.002406 -0.010696
-0.020048 -0.008680 -0.000918 0.302428 -0.127547 -0.049475
...
6 7 8 9 10 11
[numbers as above]
12 13 14 15 16 17
[numbers as above]
...
每個數字塊的行數都完全相同。我的輸出文件應該是這樣的我所試圖做的是基本上每移動塊(包括標題),以第一個塊的右側,這樣在最後:
0 1 2 3 4 5 6 7 8 9 10 11 ...
0.047224 0.184679 -0.039316 -0.008939 -0.042705 -0.014458 [numbers] ...
-0.032791 -0.039254 0.075326 -0.000667 -0.002406 -0.010696 [numbers] ...
-0.020048 -0.008680 -0.000918 0.302428 -0.127547 -0.049475 [numbers] ...
...
那麼,到底我應該基本上得到一個nxn矩陣(只考慮數字)。我已經有了一個python/bash混合腳本,它可以像這樣格式化這個文件 ,但是我已經將我的代碼的運行從Linux切換到Windows,因此不能再使用腳本的bash部分了(因爲我的代碼必須是符合所有版本的Windows)。說實話,我不知道如何做到這一點,所以任何幫助將不勝感激!
這裏就是我試圖到現在爲止(這是完全錯誤的,但我知道也許我可以建立在它...):
void finalFormatFile()
{
ifstream finalFormat;
ofstream finalFile;
string fileLine = "";
stringstream newLine;
finalFormat.open("xxx.txt");
finalFile.open("yyy.txt");
int countLines = 0;
while (!finalFormat.eof())
{
countLines++;
if (countLines % (nAtoms*3) == 0)
{
getline(finalFormat, fileLine);
newLine << fileLine;
finalFile << newLine.str() << endl;
}
else getline(finalFormat, fileLine);
}
finalFormat.close();
finalFile.close();
}
什麼是nAtoms變量?沒有標題的行數(1,2,3,...)? –
是的,例如,如果nAtoms是30,那麼沒有標題的行數將是90(因爲每個原子有3個空間座標 - 這是數字對應的),所以最終我得到一個90x90矩陣(不包括標題)。 – JavaNewb
Off topic:'while(!finalFormat.eof())'是一個常見錯誤。在這裏閱讀更多:http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – user4581301