将 .txt 文件拆分为 Javascript 中的数组
Splitting a .txt file into an array in Javascript
所以我有一个包含多行信息的文本文件,每行有几个数据片段,我需要将它们存储在一个数组中。
当它们以白色 space 或逗号分隔时,这很简单,但是对于这个特定文件,一些数据在单个数据字段中有白色 space。
例如
123 4325 你好世界 43
394 3892 你好吗 23
有人知道如何将每行分成 4 个字符串,同时 'Hello World' 和 'How are you' 保持在一起吗?
即:Array[0] = [123, 4325, Hello World, 43] 和 Array[1] = [394, 3892, How are you, 23]
抱歉,我对 JS 还很陌生,所以我不确定是否有一个真正简单的答案在眼前。
谢谢
您可以使用 JavaScript API 称为 FileReader。
您可以在 Google 中搜索它。
它可以只使用 JS 读取文件。
然后你可以使用
var lines = content.split("\n");
要用新行分隔内容。
遵循类似的工作流程。
- 选择一条线,按 space 分割。
例如"345 578 这是文本 585" -> ["345","578","This", "is", "a", "text","585"]
- 取前两个元素为数组
例如["345","578","This", "is", "a", "text","585"] -> ["345","578"] ["This", "is", "a", "text","585"]
- 将最后一个元素移到一个单独的数组中。
例如["345","578"] ["This", "is", "a", "text"] ["585"]
- 将中间数组与space合并。
例如["345","578"] ["This is a text"] ["585"]
- 合并所有数组。
例如["345","578", "This is a text", "585"]
田田!
虽然不复杂,但你想要的也不是javascript盒子里出来的。这意味着有数百种方法可以解决这个问题。我建议您根据 "soft" 要求进行选择。
代码需要多快?理解代码应该有多容易?您是否还需要确定每个值的格式(即第一个值是数字,第三个是字符串)?
如果您需要检查格式(我发现大部分时间都是这样),我建议使用正则表达式。有很多例子,这对 SO 来说是一个不同的问题。
作为您在此处提到的特定问题的解决方案,这是我更喜欢的解决方案:
function breakByPosition(str, positions) {
var start = 0;
var result = [];
while (positions.length) {
// splice returns the removed values as an array
// It also modified the source array in place
var position = positions.splice(0, 1);
var substring = str.substring(start, position);
// The OP wants by position but apparently not the spaces
// Could be replaced by if (substring !== ' ') depending on needs
if (substring.trim() !== '') {
result.push(substring);
}
start = position;
}
return result;
}
breakByPosition('123 4325 Hello World 43', [3, 4, 8, 9, 20, 21, 23]);
这个returns:
["123", "4325", "Hello World", "43"]
所以我有一个包含多行信息的文本文件,每行有几个数据片段,我需要将它们存储在一个数组中。
当它们以白色 space 或逗号分隔时,这很简单,但是对于这个特定文件,一些数据在单个数据字段中有白色 space。
例如
123 4325 你好世界 43
394 3892 你好吗 23
有人知道如何将每行分成 4 个字符串,同时 'Hello World' 和 'How are you' 保持在一起吗?
即:Array[0] = [123, 4325, Hello World, 43] 和 Array[1] = [394, 3892, How are you, 23]
抱歉,我对 JS 还很陌生,所以我不确定是否有一个真正简单的答案在眼前。
谢谢
您可以使用 JavaScript API 称为 FileReader。 您可以在 Google 中搜索它。 它可以只使用 JS 读取文件。 然后你可以使用
var lines = content.split("\n");
要用新行分隔内容。
遵循类似的工作流程。
- 选择一条线,按 space 分割。
例如"345 578 这是文本 585" -> ["345","578","This", "is", "a", "text","585"]
- 取前两个元素为数组
例如["345","578","This", "is", "a", "text","585"] -> ["345","578"] ["This", "is", "a", "text","585"]
- 将最后一个元素移到一个单独的数组中。
例如["345","578"] ["This", "is", "a", "text"] ["585"]
- 将中间数组与space合并。
例如["345","578"] ["This is a text"] ["585"]
- 合并所有数组。
例如["345","578", "This is a text", "585"]
田田!
虽然不复杂,但你想要的也不是javascript盒子里出来的。这意味着有数百种方法可以解决这个问题。我建议您根据 "soft" 要求进行选择。
代码需要多快?理解代码应该有多容易?您是否还需要确定每个值的格式(即第一个值是数字,第三个是字符串)?
如果您需要检查格式(我发现大部分时间都是这样),我建议使用正则表达式。有很多例子,这对 SO 来说是一个不同的问题。
作为您在此处提到的特定问题的解决方案,这是我更喜欢的解决方案:
function breakByPosition(str, positions) {
var start = 0;
var result = [];
while (positions.length) {
// splice returns the removed values as an array
// It also modified the source array in place
var position = positions.splice(0, 1);
var substring = str.substring(start, position);
// The OP wants by position but apparently not the spaces
// Could be replaced by if (substring !== ' ') depending on needs
if (substring.trim() !== '') {
result.push(substring);
}
start = position;
}
return result;
}
breakByPosition('123 4325 Hello World 43', [3, 4, 8, 9, 20, 21, 23]);
这个returns:
["123", "4325", "Hello World", "43"]