2017-07-29 24 views
0

我試圖合併多行中的所有數據,直到遇到分號(;)。合併所有數據,直到在JavaScript中遇到分號

輸入

1 
09; 

8 
9; 

10 
9; 

1 
00 
; 

2 
0; 

輸出

109 
89 
109 
100 
20 

如何做到這一點使用JavaScript?

這個數據不是靜態的,而是動態的,數據實時發送,我需要處理一個數據值直到分號並使用套接字將其推送到瀏覽器前端。所以我不需要一次處理所有數據然後再推送它。

這樣做:

console.log("before: ",receivedData); 
console.log("after: ",receivedData.split('\n').join('').split(';').join('\n')); 

結果:

after: 
before: 2 
after: 2 
before: 05 
after: 05 
before: ; 
after: 

before: 

after: 
before: 2 
after: 2 
before: 12 
after: 12 
before: ; 
after: 

新的數據來自於每半秒(500毫秒)。我不確定它的處理速度是否太快?它僅僅是實時的我想所以沒有時間進行計算?

+0

你嘗試過這麼遠嗎?另外,你是如何得到輸入的?它是從一個流還是一個很長的字符串等? –

+3

將數據讀入字符串。在''\ n'上分割,加入'''',分割爲'';'',加入''\ n'' –

+0

@從數據流串行端口從Arduino收集它的D收割,並且需要更正數據fromat之前推它。 –

回答

1

你正在尋找的代碼是可能的財產以後這樣的:

var buffer = ''; 
 

 
function process(data){ 
 
    var separatorIndex; 
 
    while((separatorIndex = data.indexOf(';')) !== -1){ 
 
    send(buffer + data.substr(0, separatorIndex)); 
 
    buffer = ''; 
 
    data = data.substr(separatorIndex + 1); 
 
    } 
 
    buffer += data; 
 
} 
 

 
function send(data){ 
 
    console.log(data); 
 
} 
 

 
process('123'); 
 
process('456;789;123'); 
 
process(';');

如果你能積累的所有數據,並在一次改造它,test.replace(/[^0-9;]|;$/g, '').replace(/;/g, '\r\n')應該做的伎倆。第一個正則表達式除去不是數字或分號的所有內容(以及在末尾使用分號),第二次調用用換行符替換所有分號。

+0

我更新了我的問題。它會導致前等後的輸出相同... –

+0

我更新了我的答案。 – Stephan

+0

可以與我分享片段代碼鏈接嗎?我想嘗試幾件事 –

0

添加表示您的數據的字符串。記得在每行的末尾逃脫(用反斜槓),使其運行(或者使用一個字符串模板,因爲我在下面:)

const data =` 
1 
09; 

8 
9; 

10 
9; 

1 
00 
; 

2 
0;` 
const target = []; //Where our results will end up. 

完成之後,用一個for循環在數據:

var current = 0; 
for (var iterator = 0; iterator > data.length; iterator++) { 
    if (!target[current]) {target[current] = '';} 
    if (data[iterator] != ";" && data[iterator] != "\n") { 
     target[current] += data[iterator]; //Add current data to the target 
     continue; //Continue the loop. 
    } 
    else if (data[iterator] == ";") { 
     current++; //Add one to current, so that further text ends up in the next index 
     continue; //Continue the loop. 
    } 
    else { 
     continue; 
    } 
} 

當然,這不是efficent,但它會工作,如果你是新的JS,你會走這路線。字符串操作是具有不同難度級別的任務。您也可以使用正則表達式或.join和.split鏈來實現與此循環相同的效果。

0

刪除所有的空格,然後劈在;

var str =`1 
 
09; 
 

 
8 
 
9; 
 

 
10 
 
9; 
 

 
1 
 
00 
 
; 
 

 
2 
 
0;` 
 

 
var res = str.replace(/\s/g, '').split(';').join('\n') 
 
console.log(res)

+0

問題是他並沒有一次收到所有的數據,而是每次都收到它自己的時間。 – Stephan