2017-05-25 101 views
0

我有一個文本文件,其中包含日期和相​​應的事件列表,該列表如下所示,如何在javascript中分割字符串?

txt: 
2017-05-01: All Day Event: 
2017-05-06: Day Event: 
2017-05-15: abc Event: 
2017-06-05: All Event: 
2017-06-03: Al Event: 

起初,我用一個簡單的分割功能分割的文本文件的內容,

var text=xmlhttp.responseText; 
var amber=text.split(':'); 

在琥珀陣列每個日期和事件被同時存儲,有什麼我需要做的是單獨訪問的日期和分裂的日,月,年,我嘗試使用下面的代碼

var stwo=""; 

for (var i = 0; i < amber.length; i += 2) { 
    stwo = amber[i].split('-'); 
} 

,但是當我試圖訪問stwo的內容[]顯示「未定義」,我也試着聲明stwo這樣

stwo=[" "," "]; 

,因爲我認爲stwo沒有定義爲一個數組,什麼我做錯了嗎?有沒有其他方法可以分割日期?

這裏是我完整的代碼,

<!DOCTYPE HTML> 
    <html> 
    <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    <meta http-equiv='Content-Type' content='text/html;charset=UTF-8' /> 
    <title>SAPUI5 EVENT CALENDAR</title> 
    <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" 
    id="sap-ui-bootstrap" data-sap-ui-libs="sap.m,sap.ui.layout,sap.me" 
    data-sap-ui-xx-bindingSyntax="complex" 
    data-sap-ui-theme="sap_bluecrystal"></script> 

    <script> 


    jQuery.sap.require("sap.me.Calendar"); 
    jQuery.sap.require("sap.m.RadioButton"); 
    calendar = new sap.me.Calendar({ 

    firstDayOffset : 1 

    }); 

    var xmlhttp,text; 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open('GET','C:/Users/Manimaran/Desktop/project/nn.txt',false); 
    xmlhttp.send(); 
    var text=xmlhttp.responseText; 
    var amber=text.split(':'); 


    for (var t = 0; t < amber.length; t+=2) 
    { 
    calendar.toggleDatesType([amber[t]],sap.me.CalendarEventType.Type07, 
    true); 
    //document.write(a[i+1]+"<br>"); 
    } 

    calendar.toggleDatesType([ "2017/05/15" ], 
    sap.me.CalendarEventType.Type07, 
     true); 

    var msgLabel = new sap.m.Label({ 
    width : "100%" 
    }); 
    calendar.attachTapOnDate(function(oEvent) { 

    /* date=oEvent.getParameters().date; 
    msgLabel.setText(date)*/ 
    }); 
    calendar.attachChangeCurrentDate(function(oEvent) { 


    var stwo=[" "," "]; 

    for (var i=0;i<amber.length;i+=2) 
     { 
     stwo=amber[i].split('-'); 
     } 

    /*for (var j=1;j<stwo.length;j+=3) 
     { 

     switch(stwo[j]){ 
     case '01' : stwo[j]="Jan"; 
     break; 
     case '02' : stwo[j]="Feb"; 
     break; 
     case '03' : stwo[j]="Mar"; 
      break; 
     case '04' : stwo[j]="Apr"; 
      break; 
     case '05' : stwo[j]="May"; 
      break; 
     case '06' : stwo[j]="Jun"; 
      break; 
     case '07' : stwo[j]="Jul"; 
      break; 
     case '08' : stwo[j]="Aug"; 
      break; 
     case '09' : stwo[j]="Sep"; 
      break; 
     case '10' : stwo[j]="Oct"; 
      break; 
     case '11' : stwo[j]="Nov"; 
      break; 
     case '12' : stwo[j]="Dec"; 
      break; 
     default:"gokka makka"; 
      } 
     }*/ 
     var comp=oEvent.getParameters().currentDate; 
     var tmp=comp.split(' '); 
     if(tmp[1]==tmp[1]){ 
      msgLabel.setText(stwo);  
       alert(stwo[1]); 
     }else{ 
      alert('error'); 

     } 


     }); 

var unselectBtn = new sap.m.Button({ 
    text : "unselect all", 
    press : function() { 
     var aDates = calendar.getSelectedDates(); 
     calendar.unselectAllDates(); 
     msgLabel.setText("unselected " + aDates.length + " dates"); 
     alert(text); 
    } 
}); 


var app = new sap.m.App(); 
var page = new sap.m.Page({ 
    headerContent : unselectBtn, 
    content : [ calendar, new sap.m.Label({ 
     width : "100%", 
     text : "Messages log" 
    }), msgLabel] 
}); 

// Colgate: weeks start on sunday, and show 2 months 
calendar.setSingleRow(false); 
calendar.setMonthsToDisplay(1); 
// calendar.setWeeksPerRow(1); 
calendar.setMonthsPerRow(1); 
calendar.setFirstDayOffset(0); 
app.addPage(page); 
app.placeAt('content'); 


</script> 
</head> 
<body class='sapUiBody'> 
<div id='content'></div> 
<p id="display"></p> 
</body> 
</html> 
+0

您可以添加完整的代碼? –

+0

你只是每次都給'stwo'賦值。所以最後一個之前的所有分割值都會丟失。同樣,split(':')中的最後一個字符串將是空的,因爲在最後一個':'之後,在給定字符串中沒有任何內容。所以最後什麼都不會分配給'stwo'。 –

+0

只需在循環中閱讀'stwo' https://codepen.io/anon/pen/ZKPXYK?editors=1111 – barbsan

回答

0

您通過解析每個日誌行像這樣:

// ES6 
 
const txt = ` 
 
2017-05-01: All Day Event: 
 
2017-05-06: Day Event: 
 
2017-05-15: abc Event: 
 
2017-06-05: All Event: 
 
2017-06-03: Al Event: 
 
` 
 
const amber = txt.trim().split('\n'); 
 
const logDates = amber.map(line => line.split(':')[0]); 
 
const logDatesSplitted = logDates.map(logDate => logDate.split('-')); 
 

 
console.log(logDatesSplitted); 
 

 
// ES5: Fast Splitting by colon 
 
var amber_ = txt.trim().split(':'); 
 
var logDates_ = []; 
 

 
for(var i = 0; i < amber_.length; i += 2) { 
 
    if(amber_[i] == "") continue; // filter out last empty log record; 
 
    var logDate = amber_[i].trim().split('-'); 
 
    logDates_.push(logDate); 
 
} 
 
console.log(logDates_);

+0

我正在使用XMLHttpRequest讀取文件.. –

+0

'trim'的''''參數有什麼作用? – 2017-05-25 07:39:27

+0

這是我的一個無意義的錯誤。 –

0

你的價值只是分配給每一次stwo ...
因此,最後一個之前的所有拆分值都將丟失。
split(':')中的最後一個字符串也將爲空,因爲在最後一個:之後,give字符串中沒有任何內容。
因此最後什麼都不會分配給stwo

檢查這個片段

var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:"; 
 
var amber = text.split(':'); 
 
var stwo; 
 
console.log(amber); 
 
for (var i = 0; i < amber.length; i += 2) { 
 
    if (amber[i] != "") { 
 
    stwo = amber[i].split('-'); 
 
    } 
 
} 
 

 
console.log(stwo);

如果你能看到,即使支票空字符串。只有最後的日期將被分割並添加到變量stwo

要存儲你可以在陣列中使用的陣列,每個分割值(MultiDimesional陣列)

var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:"; 
 
var amber = text.split(':'); 
 
var stwo = new Array(); 
 
console.log(amber); 
 
var j = 0; 
 
for (var i = 0; i < amber.length; i += 2) { 
 
    if (amber[i] != "" && amber[i].indexOf('-') > 1) { 
 
    stwo[j] = amber[i].split('-'); 
 
    j++; 
 
    } 
 
} 
 

 
console.log(stwo);

0

結帳這個

var test = '2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:'; 
test = test.replace(/:+$/g,""); 
var test1 = test.split(':'); 

var test2 = []; 

for (var i = 0; i < test1.length; i += 2) { 
    test2.push(test1[i].split('-')); 
    //console.log(test2); 
} 

console.log(test2);