Разбор 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.