【问题标题】:Splitting a .txt file into an array in Javascript将 .txt 文件拆分为 Javascript 中的数组
【发布时间】:2015-04-22 06:05:21
【问题描述】:

所以我有一个包含信息行的文本文件,每行有几个数据片段,我需要将它们存储在数组数组中。

当它们以空格或逗号分隔时,这很简单,但是对于这个特定的文件,一些数据在单个数据字段中具有空格。

例如。

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 还很陌生,所以我不确定是否有一个真正简单的答案在盯着我看。

谢谢

【问题讨论】:

  • 所以你想在 x 个单词之后分割一个字符串而不将它切割成单词?如果是这样,我在这里问了一个这样的问题:stackoverflow.com/questions/26507116/…
  • 如果这是一个有多个空格的单个字段的明确案例,那么我们可以编写一个自定义函数。
  • F1 F2 ANYTHING * GOES F3 - 这是结构吗?

标签: javascript arrays text split


【解决方案1】:

遵循类似的工作流程。

  1. 选择一条线,用空格分隔。

例如"345 578 这是一个文本 585" -> ["345","578","This", "is", "a", "text","585"]

  1. 将前两个元素放入一个数组中。

例如["345","578","This", "is", "a", "text","585"] -> ["345","578"] ["This", "is", "一个", "文本","585"]

  1. 将最后一个元素删除到单独的 arr 中。

例如["345","578"] ["This", "is", "a", "text"] ["585"]

  1. 用空格合并中间数组。

例如["345","578"] ["这是一段文字"] ["585"]

  1. 合并所有数组。

例如["345","578", "这是一段文字", "585"]

多多!

【讨论】:

  • @LeonSmith 如果可行,请将其标记为正确答案。
【解决方案2】:

您可以使用名为 FileReader 的 JavaScript API。 你可以在谷歌中搜索它。 它可以仅使用 JS 读取文件。 然后你可以使用

var lines = content.split("\n");

用新行分隔内容。

【讨论】:

  • 首先,他需要一个 JS 答案。二、这不解决问题,再看问题。
  • 这是我最初用来逐行分割文件的,但它并没有解决逐行分割每行内容的问题。
【解决方案3】:

虽然它并不复杂,但您想要的也不是来自 javascript 框。这意味着有数百种方法可以解决这个问题。我建议您根据“软”要求进行选择。

代码需要多快?理解代码应该有多容易?是否还需要确定每个值的格式(即第一个值是数字,第三个是字符串)?

如果您需要检查格式(我发现大多数情况下都是这样),我建议您使用正则表达式。有很多例子,对于 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]);

这会返回:

[“123”、“4325”、“Hello World”、“43”]

【讨论】:

  • 这种方法的问题是我必须对从文本文件中输入的每个唯一行进行 breakByPosition。由于每一行都有一个唯一的文本字段,因此这不会处理整个文档。不过感谢您的尝试。
  • 很高兴您能找到适合您的解决方案。感谢您的友好回复。请记住将您的问题(来自 Sunny)的正确答案标记为正确答案。 ;-)
猜你喜欢
  • 2021-04-05
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多