2013-07-18 38 views
3

我正在研究解析CSV文件的程序,然後將各自的數據移動到不同的數組中,這些數組將使電子表格不在其中。但是,我的電子表格有多餘的空行,每行都有一個單元格。進一步檢查後,我發現這些額外的單元格每個都包含一個換行符。我篩選了我的數組,以便它們不包含任何換行符,但問題仍然存在。我正在和AngularJS一起做這件事,雖然我懷疑這是導致問題的原因,但在實施Angular之前,我沒有這個問題。JavaScript數組中額外的換行符

有沒有人有過這樣的事情?動態創建換行符不應該在那裏。

下面是我的一些代碼:

 headers = breakText[0]; 
     function isDefined(element, index, array){ 
      return (element !== undefined || element !=='\n'); 
      //I tried to stop the newlines here, but this did nothing 
     }; 


     //new header file including ONLY desired titles; no undefines 
     $scope.clearHeaders = headers.filter(isDefined); 
     $scope.clearPatients = []; 
     for(var i=1; i<breakText.length; i++){ 
      if breakText[0] { 
       $scope.clearPatients.push(breakText[i].filter(isDefined)); 
      } 
     }; 

BREAKTEXT是含在那裏我已經刪除的東西未定義區域的二維數組。因此,上面的代碼創建了一個新的標題數組和另一個二維數組來存放每個人的數據數組,所有這些都沒有未定義的空格。這些數組包含空格""以及數據,但不包含\n\r\n

下面是AngularJS實現的一部分:

$scope.columns = $scope.clearHeaders; 
$scope.cells = {}; 
$scope.values = $scope.clearPatients.map(function(c,row){ 
    return c.map(function(data){ 
     return { 
      content: data, 
      color: $scope.makeColors(data) 
     }; 
    }); 
}); 

我們已經使用替換功能替換\n'',並禁止其返回的數據,如果它是''嘗試,但這個原因,因爲有些問題我們初始數據也是空白的。它也不會阻止新單元格的創建。 我們也嘗試將它包裝在諸如if(data !== '\n')之類的東西中,但沒有任何改變。

EDIT1

你可以看到它的工作現場here,但它被設計爲可以下載here這個小CSV文件的工作。 上傳文件後,表格下方的文本顯示每個單元格綁定的內容,並且如果單擊並編輯單元格,則可以看到內容動態更改。通過單擊行之間的額外單元格,可以看到它們包含換行符。

我剛剛嘗試創建一個新的過濾器函數,它將檢查clearPatients數組中的換行符,然後將所有內容過濾爲一個新數組sans-newline。然後這個新的數組被調用到表中,而不是使用換行符。然而,這引發了許多無法確定其來源的錯誤。

EDIT2

邁克普的答案和一些其他的輸入之後,確定瞭解決這個問題的最好辦法是換行var allTextLines = $scope.csv.split(/\r\n|\n/); 與正則表達式/\r?\n/

感謝你的幫助!

+0

任何機會,你可以提供的jsfiddle或Plnkr演示發生了什麼? –

+0

您在spreadsheetController.js的第31行的allTextLines變量中分割了CSV後會有一些新行。你會想要檢查你的正則表達式,或者至少通過該字符串數組循環,並擦除那些不需要的行。我會嘗試發佈調試的屏幕截圖。 –

+0

我希望你看看我發佈的有關JS代碼解析CSV數據的鏈接。許多人已經討論過爲什麼split()方法不應該用於這個任務,並且提供了幾個CSV解析器的實現,可以讓你的生活變得更容易。 –

回答

1

您的問題看起來不像AngularjS有什麼關係。你已經在$ scope.csv中獲得了你的文本數據,並且你分離了你的正則表達式,並且在所有文本行中創建了一個字符串數組。

這個字符串數組中有一些無用的行(在idx 1,3和4)。所以你要麼想修改你的正則表達式分割表達式,要麼通過這個數組循環,並刪除你不想要的東西。

你可能想看看這個傢伙的CSV到陣列JS代碼@Javascript code to parse CSV data

我可以清楚地看到你的電子表格代碼allTextLines的這些部分創建行&細胞。所以刪除這些,你就是在做生意。

debug of code

+0

對於它的價值,它看起來像使用split()是解析CSV數據最鄙視的方法之一。 –