首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行读取文件,用javascript按空格分隔每一行。

逐行读取文件,用javascript按空格分隔每一行。
EN

Stack Overflow用户
提问于 2017-05-25 12:12:49
回答 3查看 1.8K关注 0票数 2

我编写了使用HTML5 Filereader API逐行读取文件的代码,现在我要做的是从每一行中获取单独的数据。

如果我读了像下面这样的文件。

代码语言:javascript
复制
2016-8-11 23:13:27  hdhtdht hththth
2016-8-11 23:13:27  edhdhdh  ehdhdhd= dhdhd
2016-8-11 23:13:27  dfgdfgdg eagsdrgergared ergargge
2016-8-11 23:13:27  dgbdfhgb gdhdhgddh
2016-8-11 23:13:27  ggggggggggggg gtrrrrrrrrr

我想获得单独的时间,日期和所有其他细节到一个属性。

代码语言:javascript
复制
{
"_id" : ObjectId("5926c4581d3e69c01f32b074"),
"dat" : "2016-8-11",
"details" : "hdhtdht hththth",
"tim" : "23:13:27"
}

因此,对于每一行,都有三个属性,我试图使用spit() method.but进行拆分,它也分离内容。有人能提出建议吗??

这是我到目前为止写的javascript函数。

代码语言:javascript
复制
$scope.addFileContents= function(readDetails)
{
//read line by line
 var lines = readDetails.split('\n');
 for(var line = 0; line < lines.length; line++){
 //separate by spaces
 var linesSpace = lines[line].split(' ');

  var event = {
    dat: linesSpace[0],
    tim: linesSpace[1],
    details: linesSpace[2],
    space:linesSpace[3]
  };  
  Event.ReadUploadFile(event)
      .success(function () {
          $scope.status = 'Reading the selected file';
          $scope.fileDetails.push(event);
      }).
      error(function (error) {
          $scope.status = 'Unable to insert data: ' + error.message;
      });
}

}

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-25 12:20:02

使用以下算法:

  1. 将字符串拆分成单独的单词
  2. 将结果数组中的前2项转换为变量
  3. 将其余的项重新加入到一个字符串中。

示例:

代码语言:javascript
复制
var data    = lines[line].split(' ');
var date    = data.shift();
var time    = data.shift();
var details = data.join(' ');
票数 1
EN

Stack Overflow用户

发布于 2017-05-25 12:18:23

一种快速的方法是将split结果的最后一个元素(日期和时间之后)重新连接起来(这是假设布局总是相同的)。

代码语言:javascript
复制
var linesSpace = lines[line].split(' ');

var event = {
    dat: linesSpace[0],
    tim: linesSpace[1],
    details: linesSpace.slice(2).join('')
};  
票数 1
EN

Stack Overflow用户

发布于 2017-05-25 12:46:46

使用regex将字符串和Array.prototype.map()分隔为event,因此它不是对象,而是数组。演示1是我认为它将适合你的功能。演示2是实际运行的函数(我不理解剩下的代码)。

详细信息在演示2中有注释

演示1

代码语言:javascript
复制
var readDetails = `2016-8-11 23:13:27  hdhtdht hththth
2016-8-11 23:13:27  edhdhdh  ehdhdhd= dhdhd
2016-8-11 23:13:27  dfgdfgdg eagsdrgergared ergargge
2016-8-11 23:13:27  dgbdfhgb gdhdhgddh
2016-8-11 23:13:27  ggggggggggggg gtrrrrrrrrr`;

$scope.addFileContents = function(readDetails) {
  var rgx = /(\d{4}-\d?-\d{1,2})\s(\d\d:\d\d:\d\d)\s\s(.*)/g;
  
  var cap = `$1|$2|$3`;
  
  var lines = readDetails.split('\n');
  
  var event = lines.map(function(line, idx) {
    var data = (line.replace(rgx, cap)).split('|');
    var frag = {
      date: data[0],
      time: data[1],
      details: data[2]
    };
    return frag;
  });
  
  console.log(event);

  Event.ReadUploadFile(event)
    .success(function() {
      $scope.status = 'Reading the selected file';
      $scope.fileDetails.push(event);
    }).
  error(function(error) {
    $scope.status = 'Unable to insert data: ' + error.message;
  });
}

演示2

代码语言:javascript
复制
var readDetails = `2016-8-11 23:13:27  hdhtdht hththth
2016-8-11 23:13:27  edhdhdh  ehdhdhd= dhdhd
2016-8-11 23:13:27  dfgdfgdg eagsdrgergared ergargge
2016-8-11 23:13:27  dgbdfhgb gdhdhgddh
2016-8-11 23:13:27  ggggggggggggg gtrrrrrrrrr`;

/* Sloppy regex:
{4 digits}-{ 1 or 2 digits}-{1 to 2 digits}{space}
{2 digits}:{2 digits}:{2 digits}{2 spaces}{Anything until end of line}
*/
var rgx = /(\d{4}-\d?-\d{1,2})\s(\d\d:\d\d:\d\d)\s\s(.*)/g;

/* 3 capture groups delimited by a "|"
|| If you need to have any repetitive text included in each line
|| this is a good place to insert it.
*/
var cap = `$1|$2|$3`;

// An array of strings
var lines = readDetails.split('\n');

// map() each string of array to...
var event = lines.map(function(line, idx) {

  /* replace() each match on string so that it's
  || split() 3 ways delimited by the "|"
  */
  var data = (line.replace(rgx, cap)).split('|');

  /* The 3 new strings are assigned to a property
  || of an object literal
  */
  var frag = {
    date: data[0],
    time: data[1],
    details: data[2]
  };
  /* Each object literal is then returned as an
  || element of an array
  */
  return frag;
});
console.log(event);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44180300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档