Разбор CSV файла с прямым Javascript

Я пытаюсь создать довольно простой "Webapp", чтобы упростить обработку записей.

Начальный файл CSV выглядит следующим образом:

HeaderA,HeaderB,HeaderC
UserA-first,UserA-last,UserA-Active
UserB-first,UserB-last,UserB-Active
UserC-first,UserC-last,UserC-Active

Я хотел бы взять эти данные и создать следующие массивы

Var ColumnA = ["HeaderA", "UserA-first", "UserB-first", "UserC-first"];
Var ColumnB = ["HeaderB", "UserA-last", "UserB-last", "UserC-last"];
Var ColumnC = ["HeaderC", "UserA-Active", "UserB-Active", "UserC-Active"];

После того, как я их в массивах, я уверен, что смогу повторить их так, как хочу.

У меня проблемы:

  1. Как разобрать CSV файл, который не имеет запятой после третьего столбца
  2. Как это сделать с помощью Javascript (без внешних библиотек)

Это мой первый вопрос о переполнении стека, поэтому, пожалуйста, будьте осторожны с любыми ошибками, которые я, возможно, сделал :)

1 ответ

kei связал вас с сообщением, это ваше решение.

просто включите эту функцию и используйте ее в своих данных...

function CSVToArray( strData, strDelimiter ){
 // Check to see if the delimiter is defined. If not,
 // then default to comma.
 strDelimiter = (strDelimiter || ",");

 // Create a regular expression to parse the CSV values.
 var objPattern = new RegExp(
 (
 // Delimiters.
 "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +

 // Quoted fields.
 "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +

 // Standard fields.
 "([^\"\\" + strDelimiter + "\\r\\n]*))"
 ),
 "gi"
 );


 // Create an array to hold our data. Give the array
 // a default empty first row.
 var arrData = [[]];

 // Create an array to hold our individual pattern
 // matching groups.
 var arrMatches = null;


 // Keep looping over the regular expression matches
 // until we can no longer find a match.
 while (arrMatches = objPattern.exec( strData )){

 // Get the delimiter that was found.
 var strMatchedDelimiter = arrMatches[ 1 ];

 // Check to see if the given delimiter has a length
 // (is not the start of string) and if it matches
 // field delimiter. If id does not, then we know
 // that this delimiter is a row delimiter.
 if (
 strMatchedDelimiter.length &&
 (strMatchedDelimiter != strDelimiter)
 ){

 // Since we have reached a new row of data,
 // add an empty row to our data array.
 arrData.push( [] );

 }


 // Now that we have our delimiter out of the way,
 // let check to see which kind of value we
 // captured (quoted or unquoted).
 if (arrMatches[ 2 ]){

 // We found a quoted value. When we capture
 // this value, unescape any ****** quotes.
 var strMatchedValue = arrMatches[ 2 ].replace(
 new RegExp( "\"\"", "g" ),
 "\""
 );

 } else {

 // We found a non-quoted value.
 var strMatchedValue = arrMatches[ 3 ];

 }


 // Now that we have our value string, let add
 // it to the data array.
 arrData[ arrData.length - 1 ].push( strMatchedValue );
 }

 // Return the parsed data.
 return( arrData );
 }

вам может потребоваться внести некоторые изменения в функцию, если вы хотите использовать другую структуру массива, но в конце концов это функция, которую вы искали

licensed under cc by-sa 3.0 with attribution.