Προς το περιεχόμενο

Regex Expression Comma split?


Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω βοήθεια να βρούμε μια ΚΕ για να παρσάρω κάποια δεδομένα CSV. (δεν θέλω CSV Readers)

 

Έστω ότι έχω ένα αρχείο που έχει την δομή:

 

 

"Greece","GRC","Agricultural machinery, tractors","AG.AGR.TRAC.NO","","22630","24530","28500","335..... κλπ

 

 

Αν το κάνω Split με βάση το , (comma) δεν θα μου δώσει σωστό αποτέλεσμα στο "Agricultural machinery, tractors". Ενώ είναι 1 πρόταση-ομάδα, θα μου δώσει 2.

 

Η λύση είναι τα RE.

 

Μπορεί κάποιος να με βοηθήσει να βρω την ΚΕ για το παραπάνω? Συγκεκριμένα: Να διαβάζει λέξεις που είναι μέσα σε '' '', να τις χωρίζει με (,) ΑΛΛΑ αν το (,) είναι μέσα στα εισαγωγικά '' ''  να το αγνοεί.

 

Agricultural machinery, tractors          

(1 Match -> σωστό!)

 

Agricultural machinery

tractors 

(2 Matches (αυτό που δίνει και το Split(',')) -> Λάθος!)

Δημοσ.

Θέλω βοήθεια να βρούμε μια ΚΕ για να παρσάρω κάποια δεδομένα CSV. (δεν θέλω CSV Readers)

 

You are doing it wrong. Μη πω ότι βάζω στοίχημα πως μέχρι να τη βρεις έτσι που να δουλεύει σωστά θα έχεις φάει παραπάνω χρόνο απ' ότι αν έκανες parse csv.

Δημοσ.

Got it!

strind data = "\"Hello Kitty, How are you\",\"128\",\"fu\"";
List<string> wpggeasy = new List<string>(data.Split('\"'));

// List contains
Hello Kitty, How are you
,
128
,
fu

RemoveCommasFromList(wpggeasy);

// List now contains
Hello Kitty, How are you
128
fu


It was easy. btw!


@albNik

 

Δεν μπορείς να κάνεις Split με "," (στρινγ-ομάδα). δέχεται μόνο πολλά params ΞΕΧΩΡΙΣΤΑ όμως. δηλαδή θα κάνει split me " + , + " ξεχωριστά (1ο και 3ο " == ίδιο πράγμα).

 

Το δοκίμασα.

Δημοσ.

 

 

Φυσικά είναι γελοίο όταν έχεις κάποιο διαχωριστικό χαρακτήρα που εμφανίζεται guarantee και ο οποίος ποτέ δεν εμφανίζεται μέσα στα δεδομένα σου. Δε θα μπορούσε να υπάρχει κάτι απλούστερο, και με μια regex "([^"]+)" θα το ξεπέταγες σε dt.

 

Αλλά μάλλον μιλάμε μόνο για τα συγκεκριμένα δεδομένα που έχεις στα χέρια σου, μιας και το παραπάνω δεν κάνει parse ούτε αυτό:

"foo bar",baz,13

Πόσο μάλλον αυτό:

"""Hello there"", he said",42,"""Hi"" I replied"

 

 

Δημοσ.

string.Split(new string[]{""",""",

 

@albNik

 

Δεν μπορείς να κάνεις Split με "," (στρινγ-ομάδα). δέχεται μόνο πολλά params ΞΕΧΩΡΙΣΤΑ όμως. δηλαδή θα κάνει split me " + , + " ξεχωριστά (1ο και 3ο " == ίδιο πράγμα).

 

Το δοκίμασα.

 

myStr.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);

Δημοσ.

@defacer

Το πρόγραμμα είναι ειδικό και όχι γενικό (CSV Parser). Δουλεύει σε δεδομένα που έχουν στάνταρ φορματ.

 

Παράδειγμα δεδομένων:

 

 

screenshot_37.png

 

 

 

@albNik

 

δοκίμασα το x.Split(new char[] {'\"' , ',' , '\"',}); και δεν δούλευε. To new δουλεύει με κάποια προβλήματα (but its ok!):

 

 

 

screenshot_38.png

 

 

Δημοσ.
var data = "\"Hello Kitty, How are you\",\"128\",\"fu\"";
var values = Regex.Matches(data, @"""([^""]+)""")
                  .Cast<Match>().Select(m => m.Groups[1].Value).ToArray();

Αλλά αν είναι έτσι μη λες ότι θες να κάνεις parse CSV, πές έχω συγκεκριμένα αυτά και δε μ' ενδιαφέρει τίποτα άλλο.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...