[英]Best method for reading row and col of txt file
抱歉,我是C ++新手! 我一直在尋找解決方案,但似乎找不到最適合我需要的解決方案。 我正在嘗試讀取txt文件的寬度(最大字符行數)和高度(每個文件最大行數)。 規划使用變量來幫助制作動態大小的txt文件/級別。
在此之前,我已經固定了寬度和高度!
TXT FILE:用於房間布局的簡單字符輸出(空格=地板,#=牆壁,X =門):
########
# #
# X
# #
########
問題:認為這是一個簡單的問題,但是在中斷循環和程序無法繼續之前,它僅讀取每個變量(hNum,wNum)中的2個。
-我究竟做錯了什么?
-我應該以某種方式使用seekg或其他循環嗎?
-我需要將向量更改為2D向量嗎?
-哪種方法最有效?
//LOAD CURRENT ROOM FROM FILE
ss << RoomNo;
string str = ss.str();
string fname = ("Room");
fname.append(str);
fname.append(".txt");
infile.open(fname);
infile.clear();
infile.seekg(0);
if(infile.is_open())
{
// Sets width and height depndant on txt file size
string line;
//NOT WORKING!
while( !infile.eof())
{
hNum++;
getline ( infile, line);
wNum += line.length();
break;
}
height=hNum;
width=wNum;
//END
// Loop to end of file- to get you all the lines from txt file.
while(!infile.eof())
{
int i;
for(int row = 0; row < width; row++)
{
infile.getline(RoomFile, 256);
i = 0;
for(int col = 0; col < height; col++)
{
data.push_back(RoomFile[i]);
i++;
}
}
}
}
else
{
cout << "ERROR: infile not open" << endl;
}
infile.close();
這就是我得到的,嘗試執行Sky建議的操作...但是完全可以解決。 然后走過去,認為循環不是活動的,因此改變了論點。 現在出現運行時錯誤!
問題:表達式:向量下標超出范圍!
建議有人嗎?
string line;
while(getline(infile,line))
{
getline(infile, line);
tempVector.push_back(line);
}
width=line.length();
height=tempVector.size();
一種可行的工作方式是創建一個字符串向量並讀取整個文件,其中每一行都是向量中的一個字符串。
粗略的例子:
#include <vector>
#include <string>
#include <fstream>
/* ... */
vector<string> content;
string buffer;
while(!infile.eof())
{
getline(infile, &string, '/n');
content.push_back(string);
}
width = findMaxLengthOfStrings(content);
height = content.size();
您正在讀取文件的每一行作為單獨的字符串。 字符串被推到向量上。 然后,您可以使用size()
遍歷向量,輕松地找到向量中哪個字符串最長。 文件行的長度是通過向量本身的size()
獲得的。
同樣,僅發布代碼的相關部分(I / O功能)也將有所幫助。 只是說;)小屏幕尺寸之類的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.