TSMGeorge Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 Θέλω βοήθεια να βρούμε μια ΚΕ για να παρσάρω κάποια δεδομένα 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(',')) -> Λάθος!)
defacer Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 Θέλω βοήθεια να βρούμε μια ΚΕ για να παρσάρω κάποια δεδομένα CSV. (δεν θέλω CSV Readers) You are doing it wrong. Μη πω ότι βάζω στοίχημα πως μέχρι να τη βρεις έτσι που να δουλεύει σωστά θα έχεις φάει παραπάνω χρόνο απ' ότι αν έκανες parse csv.
TSMGeorge Δημοσ. 22 Νοεμβρίου 2014 Μέλος Δημοσ. 22 Νοεμβρίου 2014 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ο " == ίδιο πράγμα). Το δοκίμασα.
defacer Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 Φυσικά είναι γελοίο όταν έχεις κάποιο διαχωριστικό χαρακτήρα που εμφανίζεται guarantee και ο οποίος ποτέ δεν εμφανίζεται μέσα στα δεδομένα σου. Δε θα μπορούσε να υπάρχει κάτι απλούστερο, και με μια regex "([^"]+)" θα το ξεπέταγες σε dt. Αλλά μάλλον μιλάμε μόνο για τα συγκεκριμένα δεδομένα που έχεις στα χέρια σου, μιας και το παραπάνω δεν κάνει parse ούτε αυτό: "foo bar",baz,13 Πόσο μάλλον αυτό: """Hello there"", he said",42,"""Hi"" I replied"
albNik Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 string.Split(new string[]{""",""", @albNik Δεν μπορείς να κάνεις Split με "," (στρινγ-ομάδα). δέχεται μόνο πολλά params ΞΕΧΩΡΙΣΤΑ όμως. δηλαδή θα κάνει split me " + , + " ξεχωριστά (1ο και 3ο " == ίδιο πράγμα). Το δοκίμασα. myStr.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
TSMGeorge Δημοσ. 22 Νοεμβρίου 2014 Μέλος Δημοσ. 22 Νοεμβρίου 2014 @defacer Το πρόγραμμα είναι ειδικό και όχι γενικό (CSV Parser). Δουλεύει σε δεδομένα που έχουν στάνταρ φορματ. Παράδειγμα δεδομένων: @albNik δοκίμασα το x.Split(new char[] {'\"' , ',' , '\"',}); και δεν δούλευε. To new δουλεύει με κάποια προβλήματα (but its ok!):
albNik Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 Τοτε βαλε 2 string ("," και ") myStr.Split(new string[] { "\",\"" , "\""}, StringSplitOptions.RemoveEmptyEntries);
defacer Δημοσ. 22 Νοεμβρίου 2014 Δημοσ. 22 Νοεμβρίου 2014 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, πές έχω συγκεκριμένα αυτά και δε μ' ενδιαφέρει τίποτα άλλο. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα