【问题标题】:How to display the contents on a text file which is in tab delimited format as a html table如何将制表符分隔格式的文本文件中的内容显示为 html 表格
【发布时间】:2017-03-10 11:16:10
【问题描述】:

我有一个文本文件,其中的数据看起来像一个表格,因为它是制表符分隔的格式。

如何以 html 表格的形式只显示文本文件中的几个值。

这是我的文本文件的样子:

@   RUNNO   TRNO R# O# C# CR MODEL... TNAM..................... FNAM.... WSTA.... SOIL_ID...    SDAT    PDAT    EDAT    ADAT    MDAT    HDAT  DWAP    CWAM    HWAM    HWAH    BWAH  PWAM    HWUM  H#AM    H#UM  HIAM  LAIX  IR#M  IRCM  PRCM  ETCM  EPCM  ESCM  ROCM  DRCM  SWXM  NI#M  NICM  NFXM  NUCM  NLCM  NIAM  CNAM  GNAM  PI#M  PICM  PUPC  SPAM  KI#M  KICM  KUPC  SKAM  RECM  ONTAM   ONAM  OPTAM   OPAM   OCTAM    OCAM    DMPPM    DMPEM    DMPTM    DMPIM     YPPM     YPEM     YPTM     YPIM    DPNAM    DPNUM    YPNAM    YPNUM  NDCH TMAXA TMINA SRADA DAYLA   CO2A   PRCP   ETCP   ESCP   EPCP
        1      1  1  0  0 WH CSCER046 DRYLAND  - 0 KG N/HA      KSAS0001 KSAS8101 IBWH980018 1981279 1981289 1981294 1982141 1982174 1982174    46    7615    2848    2848       0  3308  0.0250 11371    22.0 0.374   2.0     0     0   600   422   188   234    12   115   141     1     0   -99    76   127    54    67    54   -99   -99   -99   -99   -99   -99   -99   -99     0   7842   7841      0      0   78645   78603     13.1     18.8     40.5      -99      4.9      7.0     15.1      -99      -99    100.6      -99     37.6   245  13.1   1.2  12.4  12.6  340.7  579.8  405.2    -99    -99
        2      2  1  0  0 WH CSCER046 DRYLAND  - 60 KG N/HA     KSAS0001 KSAS8101 IBWH980018 1981279 1981289 1981294 1982141 1982174 1982174    46   10018    4150    4150       0  4656  0.0288 14411    23.6 0.414   2.5     0     0   600   431   212   219    12   110   139     1    60   -99   105   132    78    94    79   -99   -99   -99   -99   -99   -99   -99   -99     0   7842   7841      0      0   78652   78608     17.3     24.2     47.3      -99      7.2     10.0     19.6      -99    167.0     95.6     69.2     39.6   245  13.1   1.2  12.4  12.6  340.7  579.8  413.4    -99    -99
        3      3  1  0  0 WH CSCER046 DRYLAND  - 180 KG N/HA SP KSAS0001 KSAS8101 

我只想在 html 表格中显示 TRNO、Model、FNAM、WSTA。

【问题讨论】:

  • 贴出你试过的代码
  • 您需要跳过第一条记录,然后解析每条记录以提取您需要的数据。然后我会将数据输入把手(或等效)模板以生成适用的 html。最好尝试解决这些不同的步骤,然后在遇到困难时将您的问题与尝试一起发布。
  • 这看起来更像是ascii table,而不是制表符分隔值

标签: javascript php html html-table


【解决方案1】:

提供的数据看起来像是一个 Ascii 表,而不是制表符分隔的值。我已经添加了这两种解决方案。

Ascii 表的解决方案 - https://jsfiddle.net/libin_v/uutc6gtk/

  1. 使用正则表达式从 Header 中获取密钥

    // Get all keys from Header Row
    var lines = asciiTable.split('\n');
    var regexPattern = /\S+\s*/g;
    var headers = lines[0].match(regexPattern);
    
  2. 通过使用我们刚刚解析的键拼接线来获取单个值。键尚未修剪(它们确实有它们的空白)。这使得拼接数据成为可能。

    // fetch individual values (Also filter based on allowed keys)
    var allowedKeys = ["TRNO", "MODEL...", "FNAM....", "WSTA...."];
    for (i = 1; i < lines.length; i++) {
      start = 0;
      value = "";
      valueArray = [];
      headers.forEach(function(key) {
        if (allowedKeys.includes(key.trim())) {
          value = lines[i].slice(start, start + key.length);
          valueArray.push(value.trim());
        }
        start += key.length;
      });
      rows.push(valueArray);
    }
    
  3. 通过插入标题完成二维数组

    // Insert Header in array
    headers.forEach(function(key) {
      if (allowedKeys.includes(key.trim())) {
        valueArray.push(key.trim());
      }
    });
    rows.unshift(valueArray);
    
  4. 将二维数组渲染为 HTML 表格 - 感谢 @veganista 提供 gist to convert 2D array to HTML

    // Display 2D-array in Table
    var table = arrayToTable(rows, {
      thead: true,
      attrs: {
        class: 'table'
      }
    })
    

制表符分隔值的解决方案 - https://jsfiddle.net/libin_v/cpa8xy85/

  1. 将这些转换为对象。我用PapaParse

    // Convert Tab Seperated Values to Objects
    var results = Papa.parse(tabSeperatedString, config);
    console.log("Results:", results);
    
  2. 用我们喜欢的键转换对象。 (简单地说,删除不需要的键)

    // Remove unwanted keys
    var allowedKeys = ["TRNO", "MODEL...", "FNAM....", "WSTA...."];
    results.data.forEach(function(row) {
        Object.keys(row).forEach(function(key) {
           if (allowedKeys.includes(key) === false) {
              delete row[key];
           }
        });
    });
    console.log("Stripped results:", results);
    
  3. 将这些对象转换为 HTML

    // generate html
    var html = "<table border='1|1'>";
    Object.keys(results.data[0]).forEach(function(key) {
      html += "<th>" + key + "</th>";
    });
    
    results.data.forEach(function(row) {
      html += "<tr>";
      Object.keys(row).forEach(function(key) {
        html += "<td>" + row[key] + "</td>";
      });
      html += "</tr>";
    });
    html += "</table>";
    
    $('body').append(html);
    

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多