簡體   English   中英

逐行讀取文件,並通過javascript用空格分隔每一行

[英]Read file line by line and separate each line by spaces by javascript

我編寫了使用HTML5 Filereader API讀取文件的代碼。完成了一行一行的讀取。但是現在我要做的是從每一行獲取單獨的數據。

如果我閱讀如下文件。

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

我想分別獲取時間,日期和所有其他詳細信息到一個屬性。

{
"_id" : ObjectId("5926c4581d3e69c01f32b074"),
"dat" : "2016-8-11",
"details" : "hdhtdht hththth",
"tim" : "23:13:27"
}

因此對於每一行都有三個屬性。我嘗試使用spit()方法進行拆分。但它也將內容分開。 有人可以建議一種方法嗎?

這是我到目前為止編寫的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; }); } } 

謝謝。

一種快速的方法是僅將split結果的最后一個元素(日期和時間之后) split (這是假設布局始終相同)

var linesSpace = lines[line].split(' ');

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

使用以下算法:

  1. 將字符串拆分為單獨的單詞
  2. 將結果數組中的前2個項目移到變量中
  3. 將其余項目重新連接成一個字符串

例:

var data    = lines[line].split(' ');
var date    = data.shift();
var time    = data.shift();
var details = data.join(' ');

使用正則表達式將字符串和Array.prototype.map()分隔為event因此它不是對象,而是數組。 演示1是我相信它將適合您的功能。 演示2是實際起作用的功能(我不理解您的其余代碼。)

演示2中對詳細信息進行了評論

演示1

 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

 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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM