【问题标题】:Reading a text file with multiple data entries and converting them into an object and stored in an array读取具有多个数据条目的文本文件并将它们转换为对象并存储在数组中
【发布时间】:2016-06-23 23:42:05
【问题描述】:

我正在上传一个文件,其中包含多个 DNA 序列 ID,后跟它们的 DNA 序列。我希望能够解析文件并将信息存储在一个对象中:

function scanForSequences(event) {
    //Get the file from HTML input tag
    var file = event.target.files[0];
    var output = document.getElementById('table');
    var tr = document.createElement('tr');
    var td = document.createElement('td');

    if(file) {
        var sequenceArray = [];
        var objArray = [];
        var obj = {};


        //Create a new file reader
        var reader = new FileReader();
        //When the file reader loads
        reader.onload = function(evt) {
            //Add the contents of file to variable contents
            var contentsByLine = evt.target.result.split('\n');
            //Alert user the file upload has succeeded
            alert('File ' + file.name + ' has been uploaded!');

            for(var i = 0; i < contentsByLine.length; i++){
                if(contentsByLine[i].charAt(i) == '>'){
                    obj.id = contentsByLine[i];
                }else{
                    sequenceArray.push(contentsByLine[i]);
                    obj.sequence = sequenceArray;
                    obj.lead_trim = 0;
                    obj.trail_trim = 0;
                }
                objArray.push({obj});
                console.log(objArray);
                //console.log(sequenceArray[i].length);
            }

        }
        reader.readAsText(file);
    } else {
        alert('Failed to upload file!');
    }
}

问题是只有第一个序列 ID 被识别,其余信息只是被推送到我的序列数组中。谁能帮我找出我的错误?我很感激!

这是文本文件:

>9013e1 ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCC CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC CTCCTGACTTTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGCAATCCGCGCGCCGGGACAGAATGCC CTGCAGGAACTTCTTCTGGAAGACCTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAG TTTAATTACAGACCTGAA

>9042f1 ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCC CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC CTCCTGACTTTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGCAATCCGCGCGCCGGGACAGAATGCC CTGCAGGAACTTCTTCTGGAAGACCTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAG TTTAATTACAGACCTGAA

【问题讨论】:

  • 你能提供一些示例输入吗?您似乎在每行的不同位置寻找“>”。

标签: javascript arrays html object


【解决方案1】:

我不确定我是否完全理解您要查找的内容,但此函数应将文本解析为数组中的对象。希望你可以修改它以获得你需要的东西。通过一些编辑,您应该能够将其用作您的 reader.onload 函数。

我修复了什么:

  • 在您的代码中,您检查的是第 i 个字符而不是每行的第一个字符
  • 您将相同的序列数组添加到所有对象,因此每个 id 最终都会附加所有序列
  • 您没有为每个条目创建一个新对象,因此本质上您将同一个对象多次推送到数组中

function parse(fileContents) {
  //Add the contents of file to variable contents
  var contentsByLine = fileContents.split('\n'),
      objArray = [],
      obj;

  for(var i = 0; i < contentsByLine.length; i++){
    if(contentsByLine[i][0] == '>'){
      obj = {
        id: contentsByLine[i],
        sequence: [],
        lead_trim: 0,
        trail_trim: 0
      };
      objArray.push({obj});
    }else{
      obj.sequence.push(contentsByLine[i]);
    }
    console.log(objArray);
  }

}

parse(">9013e1\nACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCC\n>9042f1\nACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCC");

【讨论】:

  • 太棒了!做到了!感谢您的帮助。 :)
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多