2016-03-29 3 views
5

का उपयोग कर क्षेत्र में नई पंक्तियों को CSse डेटा का विश्लेषण कैसे करें, एक CSV फ़ाइल को देखते हुए जिसमें कुछ फ़ील्ड में न्यूलाइन/रिटर्न वर्ण हैं, हम फ़ील्ड को एकाधिक पंक्तियों में विभाजित किए बिना डेटा को कैसे पार्स करते हैं।जावास्क्रिप्ट

उदाहरण सीएसवी डाटा:

ID;Name;Country;ISO-2;Address;Latitude;Longitude 
022wje3;Europa;Italy;IT;"Viale Kennedy 3 
34073 Grado";"45,67960";"13,40070" 
024oua5;Hiberia;Italy;IT;"Via XXIV Maggio 8 
00187 Rome";"41,89720";"12,48680" 
028gupn;Regal Riverside;Hong Kong;HK;"34-36 Tai Chung Kiu Road 
Shatin 
Hong Kong";"22,38260";"114,19600" 
02j7qry;Okaliptus Holiday Villas Apart;Turkey;TR;"Sevket Sabanci Caddesi No. 70 
Bahçelievler Mevkii 
Turgutreis";"37,02130";"27,25120" 
02pc99z;California Apartementos;Spain;ES;"Prat d'en Carbó 
43840 Salou";"41,07620";"1,14667" 
02tu1jz;Elvis Presley's Heartbreak;United States;US;"3677 Elvis Presley Blvd. 
Memphis 
Tennessee 38116";"35,04850";"-90,02710" 

नोट: खेतों वास्तव में अर्धविराम ; द्वारा अलग है क्योंकि पता अल्पविराम के

प्रत्येक पंक्ति 7 फ़ील्ड होते हैं शामिल कर सकते हैं कर रहे हैं, लेकिन हम नहीं चाहते कई पंक्तियों के रूप में न्यूलाइन अक्षरों वाले क्षेत्र में गलती से डेटा को पार्स करने के लिए ...

हम StackOverflow पर कुछ पर्ल-ध्यान केंद्रित जवाब मिला:

लेकिन मैं पर्ल पर थोड़ा जंग लगी हूँ और एक जे एस-ध्यान केंद्रित जवाब पता नहीं लगाया।

+1

डबल कोट्स में लिपटे न्यूलाइन रिकॉर्ड के अंत नहीं हैं। क्या आप उन पर्र्ल लिंक में से किसी से प्राप्त करते हैं? और, अगर आपको यह समझ में नहीं आता कि बेन नेडल ने यह कैसे किया है, तो आप नहीं जानते कि गैर-मानक मामलों के लिए रेगेक्स कैसे करें। सीएसवी पार्सिंग रेगेक्स के लिए एसओ खोजना बेहतर है। मैंने खुद को बहुत कुछ पोस्ट कर दिया है। – sln

+0

बिल्कुल। डबल कोट्स के अंदर मौजूद नई लाइनें अभी भी एक ही पंक्ति/फ़ील्ड हैं। मुझे लगता है कि मैंने 'सीएसवीटीओएरे' को समझा है और यह हमारी तत्काल समस्या हल कर चुका है। मैं ब्रश करने के लिए आपके कुछ RegEx उत्तरों के माध्यम से पढ़ूंगा। धन्यवाद! – nelsonic

उत्तर

9

क्या आपने बेन नेडल द्वारा CSVToArray को आजमाया है?

var rows = CSVToArray(CSV_string, ';'); 

जहां CSV_string सीएसवी डेटा के अपने स्ट्रिंग है:

/** 
* CSVToArray parses any String of Data including '\r' '\n' characters, 
* and returns an array with the rows of data. 
* @param {String} CSV_string - the CSV string you need to parse 
* @param {String} delimiter - the delimeter used to separate fields of data 
* @returns {Array} rows - rows of CSV where first row are column headers 
*/ 
function CSVToArray (CSV_string, delimiter) { 
    delimiter = (delimiter || ","); // user-supplied delimeter or default comma 

    var pattern = new RegExp(// regular expression to parse the CSV values. 
    (// Delimiters: 
     "(\\" + delimiter + "|\\r?\\n|\\r|^)" + 
     // Quoted fields. 
     "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + 
     // Standard fields. 
     "([^\"\\" + delimiter + "\\r\\n]*))" 
    ), "gi" 
    ); 

    var rows = [[]]; // array to hold our data. First row is column headers. 
    // array to hold our individual pattern matching groups: 
    var matches = false; // false if we don't find any matches 
    // Loop until we no longer find a regular expression match 
    while (matches = pattern.exec(CSV_string)) { 
     var matched_delimiter = matches[1]; // Get the matched delimiter 
     // Check if the delimiter has a length (and is not the start of string) 
     // and if it matches field delimiter. If not, it is a row delimiter. 
     if (matched_delimiter.length && matched_delimiter !== delimiter) { 
     // Since this is a new row of data, add an empty row to the array. 
     rows.push([]); 
     } 
     var matched_value; 
     // Once we have eliminated the delimiter, check to see 
     // what kind of value was captured (quoted or unquoted): 
     if (matches[2]) { // found quoted value. unescape any double quotes. 
     matched_value = matches[2].replace(
      new RegExp("\"\"", "g"), "\"" 
     ); 
     } else { // found a non-quoted value 
     matched_value = matches[3]; 
     } 
     // Now that we have our value string, let's add 
     // it to the data array. 
     rows[rows.length - 1].push(matched_value); 
    } 
    return rows; // Return the parsed data Array 
} 
अपने मामले में

साथ यह आह्वान।

+1

काम किया! धन्यवाद! – nelsonic

+0

क्या व्यक्तिगत कोशिकाओं को भी प्राप्त करने का कोई तरीका है? –

संबंधित मुद्दे