簡體   English   中英

讀取txt文件的行和列的最佳方法

[英]Best method for reading row and col of txt file

抱歉,我是C ++新手! 我一直在尋找解決方案,但似乎找不到最適合我需要的解決方案。 我正在嘗試讀取txt文件的寬度(最大字符行數)和高度(每個文件最大行數)。 規划使用變量來幫助制作動態大小的txt文件/級別。

在此之前,我已經固定了寬度和高度!

TXT FILE:用於房間布局的簡單字符輸出(空格=地板,#=牆壁,X =門):

########
#      #
#      X
#      #
########

問題:認為這是一個簡單的問題,但是在中斷循環和程序無法繼續之前,它僅讀取每個變量(hNum,wNum)中的2個。

-我究竟做錯了什么?

-我應該以某種方式使用seekg或其他循環嗎?

-我需要將向量更改為2D向量嗎?

-哪種方法最有效?

Room.cpp

//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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM