读取制表符分隔的文件,逐行读取,而不是使用制表符分隔拆分每一行

read tab delimited file, line by line than split each line using tab delimited

本文关键字:读取 分隔 制表符 拆分 一行 文件 逐行      更新时间:2023-09-26

我可以逐行读取文件,但我不知道如何使用分隔的制表符拆分每一行。 这是我的代码。需要有关此问题的帮助

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Sum of a Column in JavaScript</title>
    </head>
    <input type="file" name="file" id="file">
    <script type="text/javascript">
    document.getElementById('file').onchange = function(){
    var file = this.files[0];
    var reader = new FileReader();
    reader.onload = function(progressEvent){
    // Entire file
    console.log(this.result);
    // By lines
    var lines = this.result.split(''n');
    for(var line = 0; line < lines.length; line++){
        // By tabs
        var tabs = lines[line].split('''t');
        for(var tab = 0; tab < tabs.length; tab++){    
                alert(tabs[tab]);
        }   
    }
  };
  reader.readAsText(file);
};
</script>

我发现这很有用,并替换了 for ...使用 js .map() 函数循环。另外,我将数据加载到数组中:

    // By lines
    var arr1 = [];
    var arr2 = [];
    var arr3 = [];
    var arr4 = [];
    var arr5 = []; // assuming 5 tabs
    var lines = this.result.split(''n');
    lines.map(function(item){
      var tabs = item.split(''t');
      console.log("0",tabs[0], "1",tabs[1], "2",tabs[2],"3", tabs[3],"4", tabs[4], "5", tabs[5], "6", tabs[6]);
      arr1.push(tabs[0]);
      arr2.push(tabs[1]);
      arr3.push(tabs[2]);
      arr4.push(tabs[3]);
      arr5.push(tabs[4]);
    });
    // test two of the arrays after reading:
    for (var i = 0; i < mdarr.length; i++) {
      console.log(arr1[i], arr2[i]);
    };
  }
  reader.readAsText(file);
};

这可以用一行话来完成。首先按新行拆分,然后按制表符拆分。结果是一个 2D 数组,其中第一项是标题行。

const parsedString = tabbedString.split(''n').map((line) => line.split(''t'))

const tabbedString = `Prefix    Name    Last Name   Email   Phone   Age Role
    Jim Loco    jilo@fox.com        32  Admin
Mrs.    Sara    Foo safoo@fox.com   124389  44  Admin
Mr. John    Deer    jodeer@fox.com      37  Developer`
const parsedString = tabbedString.split(''n').map((line) => line.split(''t'))
console.log(parsedString)
[
  [
    "Prefix",
    "Name",
    "Last Name",
    "Email",
    "Phone",
    "Age",
    "Role"
  ],
  [
    "",
    "Jim",
    "Loco",
    "jilo@fox.com",
    "",
    "32",
    "Admin"
  ],
  [
    "Mrs.",
    "Sara",
    "Foo",
    "safoo@fox.com",
    "124389",
    "44",
    "Admin"
  ],
  [
    "Mr.",
    "John",
    "Deer",
    "jodeer@fox.com",
    "",
    "37",
    "Developer"
  ]
]
请注意,堆栈溢出用 4 个空格替换制表符,

因此在输入字符串中,您实际上会找到 4 个空格而不是制表符,但在我的原始代码中,它们确实是制表符。

这是我如何在 Node 中将制表符分隔的文件转换为树格式

var inputFile='Tree.tab'
fs = require('fs');
tree = {} 
fs.readFile(inputFile, 'ascii', function(err, data) {
    if(err) {
        console.log(err);
    }
    lines = data.split(''r'n');
    lines.map(function(line){
        levels = line.split("'t");
        if(typeof tree[levels[0]] === "undefined") {
           tree[levels[0]] = {}
        }
        node = tree[levels[0]]
        for ( var i = 1; i < levels.length; i++) {
            if(typeof node[levels[i]] === "undefined") {
                node[levels[i]] = {}
            }
        }
    });
    console.log(tree);
});