代码之家  ›  专栏  ›  技术社区  ›  Aaron

处理TSV文件

  •  0
  • Aaron  · 技术社区  · 6 年前

    我正在从事一个项目,该项目接收TSV文件,对其进行处理,然后输出响应。我和我的朋友使用Heroku和Spark将我们基于Java的程序转换为web应用程序。

    目前,我们的web应用程序只能使用特定的。tsv文件,而其他文件则没有,我相信这是与的特定编码有关的某种问题。tsv文件。

    我们的 预期输入文件 是一个。tsv文件由Google Sheets文档生成,但目前,我们的程序无法正确解析它。 然而 ,如果我们将google工作表上的数据复制并粘贴到文本文件中,并将其另存为。tsv然后我们的程序能够成功地处理它。这很奇怪,因为两个文件都有相同的内容和文本格式,但其中一个文件不工作,而另一个文件工作。

    这是单击按钮时调用的my sendData()JS函数:

    function sendData() {
            var fr = new FileReader();
            fr.onload = function(event) {
                var result = event.target.result;
                $.post("/rides", result, function(result, error) {
                    result = result.replace(/\n/g, "<br>");
                    $(".result").html(result);
                });
            };
            var rides = $("#rides");
            var files = rides[0]['files'];
            var file = files[0];
            fr.readAsText(file, 'ASCII');
        }
    

    下面是它通过Java接收和读取请求的地方:

    public static void main(String[] args)
    {
        port(getHerokuAssignedPort());
        staticFileLocation("/public");
        get("/ping", (req, res) -> "pong");
        post("/rides", (req, res) -> {
            System.out.println("parsing...");
            final RawParticipants participants = parser.parseInitialRequest(req.body());
            final AssignedRides result = orchestrator.orchestrateRides(participants);
            System.out.println(participants);
            return result.toString();
        });
    }
    

    输出因不同而不同。tsv文件,但从Google Sheets下载的所有文件都无法正确解析。 要么我们的程序无法从Google Sheets读取文件中的任何内容,要么它可以读取一些行,但无法读取其他行。请记住,这些数据没有什么特别之处。只有由制表符分隔的纯文本。 我研究了谷歌表单如何对其进行编码。tsv文件,它似乎没有任何特殊之处,只是ASCII编码,这与相同。通过复制/粘贴创建的tsv文件。所以我只是有点困惑如何解决这个问题,尤其是当我可以输入a时。tsv文件具有相同的确切信息,只是生成的信息不同,并让我的程序成功读取它。

    有人知道为什么它不能处理某些信息吗。tsv文件以及解决方案是什么?谢谢如果需要,我非常愿意提供更多信息。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Aaron    6 年前

    不久前,我一直在解决这个问题,但我已经设法解决了这个问题。原因是什么。tsv文件解析无法正常工作是由于从网站下载时由Google Sheets生成的CRLF行终止符。在某些方面,这是一个编码错误,但不需要通过深入的文件编辑来解决。我所需要做的就是用常规的“/n”替换“/r/n”,以表示中的新行。tsv文件。这些行终止符被放置在每行的末尾,并与文件的正确读取相混淆。因此,为了解决这个问题,我只需将它们替换为我使用的换行符的默认符号:“/n”。瞧!固定的