读取txt文件的row和col的最佳方法

时间:2013-03-17 15:02:33

标签: c++ dynamic vector ifstream

抱歉,我是一个C ++菜鸟!我一直在寻找解决方案,但似乎无法找到最适合我需要的解决方案。我想读取txt文件的宽度(行的最大char数)和高度(每个文件的最大行数)。计划使用变量来帮助制作动态大小的txt文件/级别。

我之前有固定的宽度和高度!

TXT FILE:房间布局的字符输出简单(空格=楼层,#=墙,X =门):

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

问题:认为这是一个简单的问题,但在断开循环和程序不能继续之前,它只读取每个变量中的2个(hNum,wNum)。

- 我做错了什么?

- 我应该以某种方式使用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所建议的......但是cudnt正在努力工作。然后踏上了thro,并认为循环没有活动,所以改变了论点。现在出现运行时错误!

问题:表达式:向量下标超出范围!

建议任何人?

            string line;

    while(getline(infile,line))
    {
        getline(infile, line);
        tempVector.push_back(line);
    }
    width=line.length();
    height=tempVector.size();

1 个答案:

答案 0 :(得分:0)

一种可行的方法是创建一个字符串向量并读取整个文件,每行都是向量中的一个字符串。

粗略的例子:

#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函数,会有所帮助。只是说;)小屏幕等等。