C# CSV file darabolása idézőjel problémával.

C# CSV file darabolása idézőjel problémával.
2020-03-16T22:08:31+01:00
2020-03-18T13:52:04+01:00
2022-10-15T21:16:20+02:00
sediqwe1
Sziasztok!
Van egy CSV fájlom (egy játék fordítása) amiben valamilyen perverz okból vesszővel vannak elválasztva az adatok.
Ami egészen addig jó amíg a szöveg közben meg nem jelenik a vessző, igaz ez már idézőjelben van de ez se egyszerűsítette a dolgom. viszont ez sincs mindig, csak akkor ha van a szövegben vessző. 

Tehát egy példa a feldolgozandó fájlra:

#,SkillsShortage,Skills Shortage,Businesses tell us that they simply can not find enough skilled and trained people to employ. The modern economy is increasingly skills-based and our citizens just aren't educated enough to take their place in the modern workforce. This is going to have a negative impact on the economy.,ECONOMY,sit_icons_skillsshortage.dds,Business leaders have complained that we simply do not have enough highly skilled workers to fill job vacancies.,Business leaders inform you that there is no longer a noticeable skills shortage in the economy. Our citizens are now sufficiently educated and trained to provide for the economies needs.,0,0.6,0.4,0,0,"_default_,0.75","Education,0-(0.4*x)","AdultEducationSubsidies,0-(0.2*x),8","UniversityGrants,0-(0.2*x)","Immigration,0-(0.2*x)","Technology,0.25*(x^2)",#,"GDP,0-(0.44*x)^1.4",,,,,, #,Pollution,Pollution,"Without enough measures in place to regulate what gets pumped into the air, we have ended up with high levels of pollution. This affects our health levels and quality of life. Not surprisingly environmentalists are especially upset.",ECONOMY,sit_icons_pollution.dds,We have a serious pollution problem. This could lead to health problems.,"Environmental experts tell us that the country's pollution problem is now under control, our citizens no longer need to wear facemasks when cycling to work!",0,0.6,0.4,500,0,"Environment,1.0-(1.0*x)",#,"Environmentalist,-0.1-(0.3*x)","Health,0-(0.48*x)^1.5","Environmentalist_freq,0.1+(0.1*x)",,,,,,,,,
Azt megtudom oldani ha csak vessző van, simán feldarabolom. 
De hogy hogy oldjam meg hogy mi van ha van vessző de az az idézőjelek közt...gondolatmenetet se tudom h hogy kellene elindulnom. (lásd kép... tehát darabolni vesszőkkel megy)
Mutasd a teljes hozzászólást!
Csatolt állomány
Regex a barátod, azzal lehet feldolgozni ilyen jellegű problémákat.

Valami ilyesmi a megoldás.
Mutasd a teljes hozzászólást!

  • Ő a barátod: Finite-state machine - Wikipedia
    Ilyesmi állapotok lehetnek:
    A: nem vagyunk idézőjelen belül, a vessző és a sorvége terminátor, az idézőjel B állapotban visz.
    B: idézőjelen belül vagyunk, a vessző és a sorvége nem terminátor, idézőjel hatására C állapotba kerülünk
    C: "bizonytalan állapot": idézőjel hatására B állapotba megyünk (dupla idézőjel volt, pl. "Azt mondta: ""Jajj"" "), minden más hatására A-ba.

    Legális végállapot az A és a C.
    Mutasd a teljes hozzászólást!
  • Az is megoldás lehet, hogy nem találod fel újra a meleg vizet, hanem keresel egy .NET-es CSV feldolgozó könyvtárat. Gyors Google alapján létezik ilyen, és jobb esélye van, hogy ők már felkészültek az összes szélső esetre és problémára, mint az a kód, amit most te magadnak megírsz.
    Mutasd a teljes hozzászólást!
  • Nem (programozó) teljesítményre kiélezett esetekben, nem időkritikus helyzetben
    ez nem lehet gond, 20 perc alatt megírható egy ilyen, amíg talál az ember egy alkalmasat. Ha meg nem tudja 20 perc alatt megírni, akkor azért kell megírnia hogy tanuljon :)
    Persze ha már van egy kiválasztott, többször használt bevált könyvtár, akkor jó, de érdemes egyensúlyt tartani a külső könytárak számában, mert folyamatos kockázatot jelentenek a saját kódra.

    Ezért is jók a jól összeállított keretrendszerek, pl. a .net, Nem is értem miért nem bővítette még a MS official CSV, XLS stb. író-olvasó könyvtárakkal a keretrendszert, különösen mióta Core és erősebben moduláris.
    Mutasd a teljes hozzászólást!
  • Mivel én koca programozó vagyok, és itt inkább nagyon idézőjeles a "programozó" szó rám. Általába a bruteforce-t alkalmazom, amire nekem kell arra indulok el :) Nincs köszönet benne , de nem másnak írom a programjaim, csak a saját gondjaim oldom meg úgy ahogy tudom. Ezt nem tudom megoldani... ezért kérdeztem, gondolom hogy megkérdem a többieket akik tényleg programozók.
    Regex et életemben nem írtam még magam, ez sajna az én hiányosságom lesz , igaz nem is volt rá szükségem... vagyis lehet hogy volt rá, csak nem tudtam róla :D
    .net csomagot néztem, kb 1 et találtam... de nem érzem az erőt abban hogy külön csomagot tegyek fel egy csv olvasásra, persze ha nincs más akár dll-t is teszek a program mellé.. ha rájövök hogy kell :) 

    Regexes ajánlásra ránézek hamarosan.
    Mutasd a teljes hozzászólást!
  • A regexes megoldás IS jó, melyet végül ilyenre cseréltem le mert számomra végtelenül bonyolult lett a program ezzel :\ (nem értek regexül, bővíteni nem sikerült...és azt nem szeretem ha nem értem mit csinálok :D Bár akkor kb nem kéne programoznom se :D )

    Csatolva az eredmény :)

    THX 

    How to split csv whose columns may contain ,
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • A regex elsőre szerintem pont bonyolult.
    Egyszerű "szövegfeldolgozási" feladat, már csak kihívásként-tanulásként is érdemes lenne megírnod magadnak.

    Egyszerűen menj végig egy soron, karakterenként.
    Állapotokat kezelj (pl. idézőjelben vagyok azaz kezdő volt, záró még nem) és ezzel az állapottal finomítsd azt, hogy elérkeztél-e már határoló karakterhez (vessző vagy pontosvessző, attól függ milyen a CSV).
    Ha határoló karakterhez érsz, akkor ott eltárolod a végigolvasott szövegrészt és kezdődik előlről.
    Mutasd a teljes hozzászólást!
  • Hát igen, úgy gondolom hogy nyelvtanilag le tudom vezetni.
    Mechanikailag nem...
    Mert ugye feltudom darabolni , ez eddig ok.
    Na most gondolom itt szürnöm kellene egy " jelre is.
    Tehát fogalmam sincs, menjek végig rajta karakterenként!? 
    arra gondoltam hogy rákeresek a " jelre, megnézem hogy hanyadik karakter... na itt meguntam , mondom nem hiszem hogy én vagyok az egyetlen aki ezzel szenved :D google nem volt a barátom, mert nem jól kerestem... én is a .net fele indultam el, nem pedig a problémámra kerestem rá... mert ha a problémára keresek rá akkor kiadja a megoldásokat, és nem pedig hogy igen, van ilyen csomag, töltsd le, vedd meg, így használd.. na ez egy koca programozónak mint aki magától tanulgatta annó 10 éve a C# -t annak sok...
    Mutasd a teljes hozzászólást!
  • Erre kiforrott és agyontesztelt megoldások vannak. Engedd meg, hogy bemutassam neked a CsvHelpert: CsvHelper
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd