2017-05-25 68 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);