我正在编写一个程序,它的第一步是从大约30MB的文本文件中读取。
这些文件是0到255之间的一系列数字,偶尔会有换行符(ImageJ文本图像,通过RGB堆栈)。
我可以毫无问题地将数据读入vector<int>
,并为RGB部分形成vector<vector<int> >
。但是,我想知道我的图像的高度和宽度。
总数可以通过myVector[0,1,2].size()
获得,但除非我也知道纵横比,否则我无法获得高度/宽度。
如果我使用file.get(nextChar); if (nextChar == '\n'){...}
,则代码将继续阅读,afaik。
我试着在阅读文件的同时阅读一行中的字符,但除了增加的运行时间(这不是一件大事)之外,我还有一个更严重的问题,即文件包含{ {1}}空格,而不是真实空格,所以虽然我原本以为每个数字都是4个字符,例如tab
或123(space)
等,但事实证明它们是12(space)(space)
并且123(tab)
,具有不同的字符数。
我如何计算每行的单词?示例代码如下:
12(tab)
以下代码无法准确计算:
void imageStack::readFile(const char *file, std::vector<int> &values)
{
std::ifstream filestream;
filestream.open(file);
if (!filestream.fail())
{
std::cout<< "File opened successfully: " << file << std::endl;
int countW=0;
char next;
while (!filestream.eof())
{
int currentValue;
filestream >> currentValue;
values.push_back(currentValue);
countW++;
if (filestream.get(next)=='\n')
// This doesn't work, but I think if I used filestream.get(next);
// if (next == '\n') that would check correctly,
// it would just move the file marker
{
std::cout<< "countW = " << countW << std::endl;
}
}
filestream.close();
values.pop_back();
}
else
{
std::cout << "File did not open! Filename was " << file << std::endl;
}
}