编辑:
我发现了我的错误。它与文本文件本身有关。我设法制作了两个不同大小的文本文件;并且在比较尺寸时引用了错误的文件。
对于评论和回复的所有人,我确实考虑了所有的反馈。谢谢!
在大学课堂上工作。我一直很难搞清楚如何阅读.txt文件的全部内容,其中包含“爱丽丝梦游仙境”的完整文字。
某些背景信息:
这只是构建一个openCL程序的起点,该程序将为字符串搜索执行MapReduce(即计算次数" Alice"显示在文本中)。该程序正在Ubuntu虚拟机上编译和运行;稍后为FPGA编译。
Ubuntu告诉我文件大小是148,545字节。 我的代码是53073字节。当我尝试将其打印出来时,它也没有读出整个文件。
在功能上,代码当前在文件的一部分上工作(Alice in Wonderland文本)。但它似乎没有阅读/搜索整个文本。我一直在寻找我的困境的答案,但是我没有成功。
原来如此!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <math.h>
#include <fstream>
#include "CL/opencl.h"
#include "AOCL_Utils.h"
using namespace std;
int main(int argc, char** argv) {
string line;
long wordMatch, wordLength;
wchar_t* inputLine;
ifstream inputText;
inputText.open("alice.txt", ifstream::binary | ifstream::in); // Open the text
inputText.seekg(0, ios::end);
int length = inputText.tellg(); // Gives back the wrong byte size
cout << length << "\n";
inputText.close();
char * textBuffer = new char [length];
wordMatch = 0;
inputText.open("alice.txt"); // Could've just seeked to the start
inputText.read(textBuffer, inputText.gcount());
//cout << inputText.gcount() << " bytes in file \n"; // Trying to get correct bytesize
while(getline(inputText,line)) // Read out the text, but stops before it's finished
{
cout << line << "\n";
}
inputLine = (wchar_t*) "Alice"; // What we're counting occurrences of
// My little counting routine. Works fine.
for (int i = 0; i < length; i++)
{
if (textBuffer[i] == inputLine[0])
{
wordLength = 0;
if (textBuffer[i] == inputLine[0]) {
while (textBuffer[i+wordLength] == inputLine[wordLength]) {
//cout << textBuffer[i+wordLength] << " and " << inputLine[wordLength] << "\n";
wordLength++;
}
if (inputLine[wordLength] == 0) {
wordMatch++;
}
}
}
}
inputText.close();
cout << length << " bytes \n";
cout << wordMatch << "\n";
return 0;
}
答案 0 :(得分:0)
我认为您发布的代码中的一个问题就在于:
inputText.read(textBuffer, inputText.gcount());
我怀疑,关闭文件并重新打开后,gcount()
返回的内部计数器将设置为零。
当我将该行更改为:
int n = inputText.gcount();
cout << "n: " << n << "\n";
inputText.read(textBuffer, n);
我得到了
n: 0
作为输出。
我会将该行更改为:
inputText.read(textBuffer, length);