我正在研究一个简单的程序,它将从数组中选择一个随机字符串。
我从一个预定义的数组开始,但是大约一半时间想知道使用text file (.txt)
是否更简单(或更优雅),因为我有超过1000个项目。
我在这里找到了这个解决方案(对此我没有信用),它对我有用......
function readTextFile(file) {
var items = [];
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status === 0)
{
var items = rawFile.responseText.split('\n');
alert(items[0]);
}
}
};
rawFile.send(null);
}
readTextFile('source.txt');
......在某种程度上。
我希望array items[]
每个项目包含一行。换句话说,我想分开每一行。但是,当我使用items[0]
时,split('\n')
后所有数组项都是不可取的。
items[0]
成为第一句话,所以这是正确的。如果我想alert items[1]
我未定义。
如果我使用其他分割点,例如split('')
,它可以正常工作,每个项目仅分隔每个字符,直到换行,之后我再次定义。
让我们说.txt is "asd"
的第一行:
所以'asd'在数组中定义为:
items[0] = 'a'
items[1] = 's'
items[2] = 'd'
items[3] = undefined
这就是我要得到的。我哪里错了?
文本文件的内容:
asfe
asdasdasd
asdasd
fgfg
答案 0 :(得分:3)
尝试添加String cast:
var items = String(rawFile.responseText).split('\n');
答案 1 :(得分:1)
经过一番讨论之后,我认为问题在于您的文本编辑器使用由\r
而不是\n
组成的换行符来保存文件,可能是基于Unix的服务器?
无论如何,你可以替换它们,它应该有效:
var rawText = rawFile.responseText;
rawText = rawText.replace(/\r\n/g, "\n");
rawText = rawText.replace(/\n\r/g, "\n");
rawText = rawText.replace(/\r/g, "\n");
var items = rawText.split('\n');
答案 2 :(得分:0)
可能是因为responseText
末尾有一个空白行。尝试使用trim()
:
var items = rawFile.responseText.trim().split('\n');