दिलचस्प पोस्ट
मौजूदा ईसी 2 उदाहरण के लिए कुंजीपेयर जोड़ें कैसे पोस्टग्रेएसयूएलएल UNIQUE बाधा / इसे किस प्रकार का सूचकांक उपयोग करता है? WPF में स्टैटिक रिसोर्स और डायनेमिक रिसोर्स के बीच अंतर क्या है? जब WebView इसकी सामग्री प्रदर्शित करता है तो क्या कोई श्रोता है? Android XML प्रतिशत प्रतीक एक्सेंटेंट वर्णों को बदलने के लिए php वरीयता ऍक्टिविटी एंड्रॉइड 4.0 और इससे पहले पायथन में repr () फ़ंक्शन को समझना क्या मैं जावास्क्रिप्ट से अमान्य / कस्टम सीएसएस गुणों का मूल्य प्राप्त कर सकता हूं? स्विफ्ट में UITextField और UITextView की कर्सर स्थिति प्राप्त करना और सेट करना सरणी के लिए कुछ जोड़ने के लिए कैसे? नींद () की जावास्क्रिप्ट संस्करण क्या है? बहु-आयामी सरणी से डेटा को लागू करें UITableView एकाधिक चयन जार के रूप में चलने पर क्लासपाथ संसाधन नहीं मिला

जावास्क्रिप्ट का उपयोग करते हुए * .CSV फ़ाइल से डेटा कैसे पढ़ा जाए?

मेरा सीएसवी डेटा इस तरह दिखता है:

heading1, heading2, heading3, heading4, heading5, value1_1, value2_1, value3_1, value4_1, value5_1, value1_2, value2_2, value3_2, value4_2, value5_2 ….

आप इस डेटा को कैसे पढ़ते हैं और इस तरह एक सरणी में जावास्क्रिप्ट का उपयोग करते हैं ?:

[हेडिंग 1: मान 1_1, हेडिंग 2: मूल्य 2_1, हेडिंग 3: मान 3_1, हेडिंग 4: मान 4_1, हेडिंग 5: मान 5_1], [हेडिंग 1: मान 1_2, हेडिंग 2: मान 2_2, हेडिंग 3: मान 3_2, हेडिंग 4: मान 4_2, हेडिंग 5: मान 5_2] ….

मैंने इस कोड की कोशिश की है, लेकिन कोई भाग्य नहीं है!

<script type="text/javascript"> var allText =[]; var allTextLines = []; var Lines = []; var txtFile = new XMLHttpRequest(); txtFile.open("GET", "file://d:/data.txt", true); txtFile.onreadystatechange = function() { allText = txtFile.responseText; allTextLines = allText.split(/\r\n|\n/); }; document.write(allTextLines);<br> document.write(allText);<br> document.write(txtFile);<br> </script> 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट का उपयोग करते हुए * .CSV फ़ाइल से डेटा कैसे पढ़ा जाए?"

नोट: मैं इस समाधान को तैयार करने से पहले सभी "विशेष मामलों" के बारे में याद दिलाया था जो एक मान्य सीएसवी फ़ाइल में हो सकता है, जैसे उद्धरण उद्धरण मैं उन लोगों के लिए अपना जवाब छोड़ रहा हूं जो कुछ जल्दी और गंदे चाहते हैं, लेकिन मैं इवान की सटीकता के जवाब का सुझाव देता हूं।


यह कोड तब काम करेगा जब आपकी डेटा। data.txt फ़ाइल अल्पविराम से अलग हुई प्रविष्टियों की एक लंबी स्ट्रिंग होती है, जिसमें कोई नई लाइन नहीं होती है:

data.txt:

  heading1,heading2,heading3,heading4,heading5,value1_1,...,value5_2 

जावास्क्रिप्ट:

 $(document).ready(function() { $.ajax({ type: "GET", url: "data.txt", dataType: "text", success: function(data) {processData(data);} }); }); function processData(allText) { var record_num = 5; // or however many elements there are in each row var allTextLines = allText.split(/\r\n|\n/); var entries = allTextLines[0].split(','); var lines = []; var headings = entries.splice(0,record_num); while (entries.length>0) { var tarr = []; for (var j=0; j<record_num; j++) { tarr.push(headings[j]+":"+entries.shift()); } lines.push(tarr); } // alert(lines); } 

निम्न कोड रिकॉर्ड के प्रत्येक समूह के बीच लाइनब्रेक के साथ "सत्य" सीएसवी फ़ाइल पर काम करेगा:

data.txt:

 heading1,heading2,heading3,heading4,heading5 value1_1,value2_1,value3_1,value4_1,value5_1 value1_2,value2_2,value3_2,value4_2,value5_2 

जावास्क्रिप्ट:

 $(document).ready(function() { $.ajax({ type: "GET", url: "data.txt", dataType: "text", success: function(data) {processData(data);} }); }); function processData(allText) { var allTextLines = allText.split(/\r\n|\n/); var headers = allTextLines[0].split(','); var lines = []; for (var i=1; i<allTextLines.length; i++) { var data = allTextLines[i].split(','); if (data.length == headers.length) { var tarr = []; for (var j=0; j<headers.length; j++) { tarr.push(headers[j]+":"+data[j]); } lines.push(tarr); } } // alert(lines); } 

http://jsfiddle.net/mblase75/dcqxr/

अपनी खुद की लिखने की जरूरत नहीं है …

JQuery-CSV लायब्रेरी में $.csv.toObjects(csv) नामक एक फ़ंक्शन है जो मैपिंग स्वचालित रूप से करता है।

नोट: लाइब्रेरी किसी भी सीएसवी डेटा को संभालने के लिए डिज़ाइन की गई है जो आरएफसी 4180 के अनुरूप है, जिसमें सभी गंदा किनारे वाले मामलों को शामिल किया गया है, जो कि अधिकांश 'सरल' समाधानों की अनदेखी करते हैं

@ ब्लेज़मॉन्गर की तरह पहले ही कहा गया है, पहले आपको डेटा मान्य सीएसवी बनाने के लिए लाइन ब्रेक जोड़ना होगा।

निम्न डेटासेट का उपयोग करना:

 heading1,heading2,heading3,heading4,heading5 value1_1,value2_1,value3_1,value4_1,value5_1 value1_2,value2_2,value3_2,value4_2,value5_2 

कोड का प्रयोग करें:

 var data = $.csv.toObjects(csv): 

'डाटा' में सहेजा आउटपुट होगा:

 [ { heading1:"value1_1",heading2:"value2_1",heading3:"value3_1",heading4:"value4_1",heading5:"value5_1" } { heading1:"value1_2",heading2:"value2_2",heading3:"value3_2",heading4:"value4_2",heading5:"value5_2" } ] 

नोट: तकनीकी तौर पर, जिस तरह से आपने कुंजी-मान मैपिंग लिखा है, वह अमान्य JavaScript है। कुंजी-मान जोड़े वाले ऑब्जेक्ट को कोष्ठक में लपेटा जाना चाहिए।

यदि आप इसे अपने लिए प्रयास करना चाहते हैं, तो मेरा सुझाव है कि आप 'toObjects ()' टैब के तहत बेसिक प्रयोग प्रदर्शन पर एक नज़र डालें।

अस्वीकरण: मैं मूल लेखक हूँ- jquery-csv

अद्यतन करें:

उस डेटासेट का उपयोग करने के लिए संपादित किया गया जिसे ऑप प्रदान किया गया था और डेमो के लिए लिंक शामिल किया गया था जहां डेटा को वैधता के लिए परीक्षण किया जा सकता है।

Update2:

Google Code के shuttering के कारण jquery-csv GitHub में ले जाया गया है

अल्पविराम पर विभाजित न करें – यह अधिकतर सीएसवी फाइलों के लिए काम नहीं करेगा, और इस प्रश्न के पास हर व्यक्ति पर लागू करने के लिए पूछने वाले के इनपुट डेटा के बहुत सारे विचार हैं पार्सिंग सीएसवी एक प्रकार का डरावना है क्योंकि वास्तव में कोई आधिकारिक मानक नहीं है, और सीमांकित पाठ लेखकों के बहुत सारे किनारे पर विचार नहीं करते हैं

यह सवाल पुराना है, लेकिन मेरा मानना ​​है कि अब एक बेहतर समाधान है कि पापा पार्स उपलब्ध है। यह एक लाइब्रेरी है जो मैंने लिखा है, योगदानकर्ताओं की मदद से, जो सीएसवी पाठ या फाइलों को पार्स करता है यह एकमात्र जेएस लाइब्रेरी है जो मुझे पता है कि आकार में गीगाबाइट फ़ाइलों का समर्थन करता है। यह बदसूरत इनपुट को संतोषजनक रूप से संभालता है।

1 जीबी फ़ाइल 1 मिनट में पार्स की गई: 1 मिनट में पार्सेड 1 जीबी फ़ाइल

( अपडेट: पापा पार्स 4 के साथ, उसी फ़ाइल को फ़ायरफॉक्स में केवल 30 सेकेंड में ही लिया गया। अब पापा पार्स 4 ब्राउज़र के लिए सबसे तेज़ ज्ञात सीएसवी पार्सर है।)

पार्सिंग पाठ बहुत आसान है:

 var data = Papa.parse(csvString); 

पार्सिंग फ़ाइलें भी आसान है:

 Papa.parse(file, { complete: function(results) { console.log(results); } }); 

स्ट्रीमिंग फाइल समान होती है (यहां एक उदाहरण है जो एक दूरस्थ फ़ाइल स्ट्रीम करता है):

 Papa.parse("http://example.com/bigfoo.csv", { download: true, step: function(row) { console.log("Row:", row.data); }, complete: function() { console.log("All done!"); } }); 

यदि आपका वेब पेज पार्सिंग के दौरान ताला लगाता है, तो पापा वेब वेब साइट का इस्तेमाल अपने वेब साइट को प्रतिक्रियाशील रखने के लिए कर सकते हैं।

हेडर कॉलम मौजूद होने पर पिताजी, सीमांकक स्वत: पता लगा सकते हैं और मंगलवार के मानों के साथ मिलान कर सकते हैं। यह संख्यात्मक मूल्यों को वास्तविक संख्या प्रकारों में भी बदल सकता है। यह उचित रूप से लाइन ब्रेक और उद्धरण और अन्य अजीब स्थितियों को पार्स करता है, और यहां तक ​​कि संभव के रूप में मजबूत रूप से दुर्भावनापूर्ण इनपुट को संभालता है। मैंने मौजूदा पुस्तकालयों से प्रेरणा ले ली है ताकि पिताजी बन सकें, इसलिए अन्य जेएस लागू करने के लिए।

यहाँ एक जावास्क्रिप्ट फ़ंक्शन है जो सीएसवी डेटा को पार्स करता है, उद्धरण चिह्नों के अंदर मिले कॉमस के लिए लेखांकन।

 // Parse a CSV row, accounting for commas inside quotes function parse(row){ var insideQuote = false, entries = [], entry = []; row.split('').forEach(function (character) { if(character === '"') { insideQuote = !insideQuote; } else { if(character == "," && !insideQuote) { entries.push(entry.join('')); entry = []; } else { entry.push(character); } } }); entries.push(entry.join('')); return entries; } 

सीएसवी फ़ाइल को पार्स करने के लिए फंक्शन के उदाहरण का उपयोग करें जो इस तरह दिखता है:

 "foo, the column",bar 2,3 "4, the value",5 

सरणियों में:

 // csv could contain the content read from a csv file var csv = '"foo, the column",bar\n2,3\n"4, the value",5', // Split the input into lines lines = csv.split('\n'), // Extract column names from the first line columnNamesLine = lines[0], columnNames = parse(columnNamesLine), // Extract data from subsequent lines dataLines = lines.slice(1), data = dataLines.map(parse); // Prints ["foo, the column","bar"] console.log(JSON.stringify(columnNames)); // Prints [["2","3"],["4, the value","5"]] console.log(JSON.stringify(data)); 

यहां बताया गया है कि आप डेटा को ऑब्जेक्ट में कैसे बदल सकते हैं, जैसे डी 3 के सीएसवी पार्सर (जो कि एक ठोस तृतीय पक्ष समाधान है):

 var dataObjects = data.map(function (arr) { var dataObject = {}; columnNames.forEach(function(columnName, i){ dataObject[columnName] = arr[i]; }); return dataObject; }); // Prints [{"foo":"2","bar":"3"},{"foo":"4","bar":"5"}] console.log(JSON.stringify(dataObjects)); 

यहां इस कोड का एक कामकाज है I

का आनंद लें! – कुरान

यहां एक बाहरी सीएसवी को जावास्क्रिप्ट (jQuery का उपयोग करके) में पढ़ने का एक और तरीका है।

यह थोड़ी अधिक लंबी घुमावदार है, लेकिन मुझे लगता है कि डेटा को सरणियों में पढ़कर आप ठीक प्रक्रिया का अनुसरण कर सकते हैं और आसान समस्या निवारण के लिए बना सकते हैं।

किसी और को मदद कर सकते हैं

डेटा फ़ाइल उदाहरण:

 Time,data1,data2,data2 08/11/2015 07:30:16,602,0.009,321 

और यहां कोड है:

 $(document).ready(function() { // AJAX in the data file $.ajax({ type: "GET", url: "data.csv", dataType: "text", success: function(data) {processData(data);} }); // Let's process the data from the data file function processData(data) { var lines = data.split(/\r\n|\n/); //Set up the data arrays var time = []; var data1 = []; var data2 = []; var data3 = []; var headings = lines[0].split(','); // Splice up the first row to get the headings for (var j=1; j<lines.length; j++) { var values = lines[j].split(','); // Split up the comma seperated values // We read the key,1st, 2nd and 3rd rows time.push(values[0]); // Read in as string // Recommended to read in as float, since we'll be doing some operations on this later. data1.push(parseFloat(values[1])); data2.push(parseFloat(values[2])); data3.push(parseFloat(values[3])); } // For display var x= 0; console.log(headings[0]+" : "+time[x]+headings[1]+" : "+data1[x]+headings[2]+" : "+data2[x]+headings[4]+" : "+data2[x]); } }) 

आशा है कि यह भविष्य में किसी को मदद करता है!

स्वीकृत उत्तर के अनुसार ,

मुझे यह 1 से 0 को बदलकर काम करने के लिए मिला है:

 for (var i=1; i<allTextLines.length; i++) { 

में परिवर्तित किया गया

 for (var i=0; i<allTextLines.length; i++) { 

यह एक फ़ाइल को एक सतत लाइन के साथ 1 की allTextLines.length होने के रूप में गणना करेगा। इसलिए यदि लूप 1 पर शुरू होता है और जब तक यह 1 से कम है, तब तक यह रन कभी नहीं चलता है। इसलिए रिक्त चेतावनी बॉक्स।

 function CSVParse(csvFile) { this.rows = []; var fieldRegEx = new RegExp('(?:\s*"((?:""|[^"])*)"\s*|\s*((?:""|[^",\r\n])*(?:""|[^"\s,\r\n]))?\s*)(,|[\r\n]+|$)', "g"); var row = []; var currMatch = null; while (currMatch = fieldRegEx.exec(this.csvFile)) { row.push([currMatch[1], currMatch[2]].join('')); // concatenate with potential nulls if (currMatch[3] != ',') { this.rows.push(row); row = []; } if (currMatch[3].length == 0) break; } } 

मुझे regex करना जितना संभव हो उतना करना चाहिए। यह regex सभी वस्तुओं को या तो उद्धृत या अनक्ॉटेड के रूप में मानता है, या तो एक कॉलम सीमांकक या एक पंक्ति सीमांकक के बाद। या पाठ का अंत

यही वजह है कि आखिरी स्थिति – इसके बिना यह अनंत लूप होगी क्योंकि पैटर्न शून्य लंबाई क्षेत्र (सीएसवी में पूरी तरह से वैध) से मेल खा सकता है। लेकिन जब से $ शून्य लंबाई का दावा है, यह एक गैर मैच के लिए प्रगति नहीं करेगा और लूप समाप्त होगा।

और एफवाईआई, मुझे दूसरे विकल्प को मूल्य के चारों ओर उद्धरण को छोड़ देना पड़ा; ऐसा लगता है कि यह मेरे जावास्क्रिप्ट इंजन के पहले विकल्प से पहले निष्पादित हो रहा था और उद्धरण चिह्नों के हिस्से के रूप में उद्धरण चिह्नों पर विचार कर रहा था। मैं नहीं पूछूंगा – बस काम करने के लिए मिल गया।