सरल CSV / DSV आयातक


12

इस के एक व्युत्क्रम से थोड़ा अधिक ।

में:  मल्टी-लाइन डीएसवी डेटा और एक एकल सीमांकक चरित्र। DSV को एक फ़ाइल, एक फ़ाइल नाम, लाइन-ब्रेक अलग स्ट्रिंग, स्ट्रिंग की सूची आदि के रूप में लिया जा सकता है। सभी रिकॉर्ड में समान फ़ील्ड्स होते हैं, और कोई फ़ील्ड खाली नहीं होती है। डेटा में सीमांकक वर्ण नहीं होता है और कोई उद्धृत या भागने वाला तंत्र नहीं होता है।

आउट:  DSV का प्रतिनिधित्व करने वाला एक डेटा स्ट्रक्चर, जैसे स्ट्रिंग्स की एक सूची या स्ट्रिंग्स का एक मैट्रिक्स।

उदाहरण

["here is,some,sample","data,delimited,by commas"]और ",":
[["here is","some","sample"],["data","delimited","by commas"]]

["hello;\"","\";world","\";\""]और ";":
[["hello","\""],["\"","world"],["\"","\""]](भागता है क्योंकि यह उदाहरण JSON का उपयोग करता है)

["to be or not","that is the question"]और " ":
[["to","be","or","not"],["that","is","the","question"]]


तो बस स्पष्ट करने के लिए, हम बस दिए गए चार्ट के उदाहरणों में प्रत्येक आइटम को विभाजित करते हैं?
ETHproductions

@ETHproductions यह सही है।
शाम

यदि पहले या अंतिम चरित्र का परिसीमन है, तो हमें स्ट्रिंग्स को कैसे विभाजित करना चाहिए? ",for,example,this,string,"
जीबी

@GB कोई फ़ील्ड खाली नहीं है
Adám

तो हम मान सकते हैं कि ऐसा नहीं होगा?
GB

जवाबों:


3

जेली , 3 2 बाइट्स

डेनिस बताते हैं कि जबकि 2 बाइट समाधान काम नहीं करता है, डाइएडिक लिंक खुद करता है, और यह वास्तव में जिस तरह से कमांड लाइन तर्कों को पार्स किया जाता है जो इसे इस तरह से देखते हैं।

ṣ€

यह ऑनलाइन की कोशिश करो! - पाद स्पष्ट रूप से बाएँ और दाएँ सेट के साथ फ़ंक्शन को कॉल करता है, और एक ग्रिड के रूप में प्रारूप *।

नीचे के रूप में बिल्कुल सही तर्क के घटनाओं के अलावा विभाजन के अलावा, सही तर्क के बराबर सब्लिस्ट पर।


œṣ€

3 byter - पाद लेख प्रदर्शित करता है एक ग्रिड * के रूप में परिणाम।

एक डाइएडिक लिंक (फ़ंक्शन) जो बाईं ओर डीएसवी सूची और दाईं ओर सीमांकक लेता है।

कैसे?

œṣ€ - Main link: list l, delimiter d
  € - for each item in l:
œṣ  -     split at occurrences of sublists equal to d

* एक पूर्ण कार्यक्रम के रूप में निहित आउटपुट सभी वर्णों को एक साथ "स्मैश" करेगा, इसलिए टीआईओ लिंक का पाद लेख लिंक को डायड कहता है और Gपरिणाम को अच्छी तरह से प्रारूपित करने के लिए उपयोग करता है।


@ ओएक्सएक्स निहित
एडमंड

@ ऑक्स हाँ यह एक ऐसा कार्य है जो एक सूची देता है। फुटर उस निहित आउटपुट को ओवरराइड करना है जो तब होता है जब इसे पूर्ण प्रोग्राम के रूप में चलाया जाता है।
जोनाथन एलन

7

जाप , 3 बाइट्स

mqV

इसे ऑनलाइन टेस्ट करें! ( -Qआउटपुट को पूर्व-निर्धारित करने के लिए ध्वज का उपयोग करता है )

mqV  // Implicit: U, V = inputs
m    // Map each item in U by the following function:
 qV  //   Split the item at instances of V.
     // Implicit: output result of last expression

: हे एक JSGL ने MATL को हराया!
डाउनगेट

7

पॉवर्सशेल, 25 22/23 बाइट्स

दो विकल्प, एक को पहले arg पर स्प्लिट कहते हैं, दूसरे arg को एक डेलिम वैल्यू के रूप में इस्तेमाल करते हैं।

$args[0]-split$args[1]

एक बाइट लंबे समय तक, csvs को पार्स करने के लिए बनाया जाता है, दूसरे के रूप में फ़ाइल नाम लेता है।

ipcsv $args[0] $args[1]

-2 क्योंकि इसके लिए -Delimiter( -D) परम की आवश्यकता नहीं है , और इसे डिफ़ॉल्ट रूप से मान लेंगे।

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

ipcsvके लिए एक उपनाम है Import-Csv, पहले अनाम इनपुट के रूप में एक फ़ाइल नाम लेता है, और डिफ़ॉल्ट व्यवहार द्वारा दूसरा के रूप में परिसीमन चरित्र।

उदाहरण के खिलाफ विकी पृष्ठ रिटर्न से चलाएँ

PS C:\Users\Connor\Desktop> .\csvparse.ps1 'example.csv' ','

Date     Pupil               Grade
----     -----               -----
25 May   Bloggs, Fred        C
25 May   Doe, Jane           B
15 July  Bloggs, Fred        A
15 April Muniz, Alvin "Hank" A


5

हास्केल, 29 बाइट्स

import Data.Lists
map.splitOn

प्रयोग उदाहरण: (map.splitOn) " " ["to be or not","that is the question"]-> [["to","be","or","not"],["that","is","the","question"]]




4

गणितज्ञ, 11 बाइट्स

StringSplit

बिलियन फ़ंक्शन दो तर्कों को ले रहा है, तार की एक सूची और एक चरित्र (और उससे भी अधिक सामान्य)। उदाहरण का उपयोग:

StringSplit[{"to be or not", "that is the question"}, " "]

पैदावार

{{"to", "be", "or", "not"}, {"that", "is", "the", "question"}}

4

MATLAB / ऑक्टेव, 41 25 बाइट्स

@(x,d)regexp(x,d,'split')

एक अनाम फ़ंक्शन बनाता है जिसका नाम ansपहला इनपुट स्ट्रिंग के सेल ऐरे के रूप में और दूसरा इनपुट स्ट्रिंग के रूप में स्वीकार करता है।

ans({'Hello World', 'How are you'}, ' ')

इसे ऑनलाइन आज़माएं


4

चेडर, 19 बाइट्स

a->b->a=>@.split(b)

लूपिंग क्षमताओं का अच्छा प्रदर्शन। मैंने नई रचना और एफ.ओ.पी. ब्लॉक ताकि दिलचस्प गोल्फ के लिए अनुमति देता है। (=>:@.split)काम करना है, लेकिन यह नहीं है :(


3

MATL, 14 12 4 बाइट्स

H&XX

MATL ऑनलाइन पर इसे आज़माएं (लिंक में आउटपुट सेल ऐरे की गतिशीलता दिखाने के लिए अंत में एक संशोधन है)।

व्याख्या

        % Implicitly grab the first input as a cell array of strings
        % Implicitly grab the delimiter as a string
H       % Push the number literal 2 to the stack
&XX     % Split the input at each appearance of the delimiter
        % Implicitly display the result


1

रूबी '-n', 17 + 1 = 18 बाइट्स का उपयोग करते हुए

p chomp.split *$*

यह काम किस प्रकार करता है

  • फाइल से इनपुट
  • विभाजक को कमांड लाइन पैरामीटर के रूप में दिया जाता है
  • चूंकि हमारे पास केवल 1 पैरामीटर है, *$*स्ट्रिंग को अलग करता है और हम इसे splitफ़ंक्शन के पैरामीटर के रूप में उपयोग कर सकते हैं
  • मैंने बचने की कोशिश की chompलेकिन कोई भी उपाय इससे ज्यादा लंबा लगता है।


1

GNU sed , 48 + 1 (r फ्लैग) = 49 बाइट्स

1h;1d
:
G
/,$/bp
s:(.)(.*)\n\1:,\2:
t
:p;s:..$::

इसे ऑनलाइन आज़माएं!

Sed में कोई डेटा प्रकार नहीं हैं, लेकिन एक सूची का एक प्राकृतिक प्रतिनिधित्व लाइनों का एक संग्रह होगा। जैसे, इनपुट फॉर्मेट में एक अलग लाइन पर डीएसवी रिकॉर्ड होते हैं, पहली लाइन पर मौजूद सीमांकक के साथ।

स्पष्टीकरण: डिजाइन के अनुसार, sed स्क्रिप्ट को कई बार चलाता है क्योंकि इनपुट लाइनें हैं

1h;1d                  # store delimiter, start new cycle
:                      # begin loop
G                      # append saved delimiter
/,$/bp                 # if delimiter is ',', skip replacements and go to printing
s:(.)(.*)\n\1:,\2:     # replace first occurrence of delimiter with ','
t                      # repeat
:p;s:..$::             # print label: delete appended delimiter (implicit printing)

1

REXX, 95 बाइट्स

arg f d
do l=1 while lines(f)
    n=linein(f)
    do #=1 while n>''
        parse var n w (d) n
        o.l.#=w
    end
end

फ़ाइल नाम और तर्क के रूप में एक सीमांकित लेता है, फ़ाइल की सामग्री को स्टेम में डाल दिया जाता है o


क्या वह सब व्हाट्सएप वास्तव में आवश्यक है?
आदम

नहीं, मैंने इसे केवल पठनीयता के लिए प्रेरित किया है। बाइट काउंट unindented कोड के लिए है।
मूर्ति

REXX का यह कौन सा स्वाद है?
आदम

मुझे लगता है कि यह शुद्ध एएनएसआई REXX है। मैंने केवल रेजिना के साथ इसका परीक्षण किया है।
idrougge


0

एपीएल (डायलॉग) , 4 बाइट्स

15.0 तक के संस्करणों में और इसमें शामिल हैं, यह ⎕ML←3कई लोगों द्वारा डिफ़ॉल्ट है। संस्करण 16.0 से केवल उसी प्रभाव के लिए प्रतिस्थापित किया जा सकता है।

विभाजक को बाएं तर्क के रूप में और DSV को सही तर्क के रूप में लेता है।

≠⊂¨⊢

इसे ऑनलाइन आज़माएं!

 असमानताएं (बाएं तर्क और सही तर्क की)

⊂¨ प्रत्येक विभाजन

 सही तर्क

विभाजन से तात्पर्य बाएं तर्क में संबंधित शून्य द्वारा इंगित किए गए सभी तत्वों को हटाने से है, और जब भी बाएं तर्क में एक समान संख्या अपने पूर्ववर्ती से अधिक होती है, तो एक नया विभाजन शुरू होता है, अर्थात यदि बाईं ओर का तर्क बुलियन हो, यहाँ मामला है।


0

आर, 8 बाइट्स (2 तरीके)

इस चुनौती की आवश्यकताओं को पूरा करने वाले आर के दो निर्माण कार्य हैं:

strsplit

तार और एक विभाजक का वेक्टर लेता है, और अलग किए गए तार के वैक्टर की एक सूची देता है।

read.csv

एक फ़ाइल नाम और एक विभाजक लेता है, और एक डेटा फ़्रेम लौटाता है। तकनीकी रूप से यह 10 बाइट्स हो सकता है क्योंकि इसे विकल्प की आवश्यकता है header=Fइसलिए यह कॉलम नाम के रूप में पहले तत्वों को नहीं पढ़ेगा। वर्तमान में TIO लिंक स्टड से पढ़ता है।

इन ऑनलाइन की कोशिश करो!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.