Excel sortörés vessző beolvasásnál .CSV-ből
2011-01-09T21:35:02+01:00
2011-01-10T18:44:59+01:00
2022-08-03T10:25:30+02:00
Niko
Sziasztok!

Excel VBA-val olvastatok be egy .CSV állományt, amiben vannak vesszők is.
A vessző ugye a sortörés jele, így a .CSV beolvasáskor a vessző utáni adatokat nem olvassa be a VBA, amikor soronként műveletet szeretnék végezni az adatokkal.

Az adatállomány minden nap frissül egy SQL SELECT-ből.
Hogy oldható meg a teljes sor beolvasása?

Vagy a VBA oldalt kellene megfogni, hogy a vesszőt beolvasáskor alakítsa ponttá, vagy az SQL oldalon kellene valamit kitalálni, hogy a SELECT ne írjon le vesszőket.

A SELECT-et én írtam, bele tudok nyúlni, ha erre valakinek van ötlete.

Előre is köszönöm!
Mutasd a teljes hozzászólást!
Tied. Mind a 0
Mutasd a teljes hozzászólást!

  • Excel VBA-val olvastatok be egy .CSV állományt


    Tehát írtál egy makrót a beolvasásra. Akkor mi a gond?
    Mutasd a teljes hozzászólást!
  • A vessző ugye a sortörés jele,

    A súgó szerint:

    Két gyakran használt szöveges fájlformátum van: Tagolt szöveges fájl (.txt), amelyben általában a tabulátor (009-es ASCII karakterkód) választja el egymástól a szöveg mezőit. Vesszővel tagolt szöveges fájl (.csv), amelyben rendszerint a vessző (,) választja el egymástól a szöveg mezőit. Megváltoztathatja mind a tagolt, mind a vesszővel tagolt (.csv) fájlokban használt elválasztó karaktert. Ezzel garantálhatja, hogy az importálási vagy exportálási művelet a kívántak szerint történik.
    Vagyis nem kell ragaszkodni a vesszőhöz, lehet tabulátor is..
    Mutasd a teljes hozzászólást!
  • Szia!
    Lehet, hogy fantáziátlan vagyok, de ha:

    input #1, sor$
    -el beolvastatok egy ;-vel elválasztott sort és van benne egy vessző, akkor a sor$ nem tartalmazza a vessző utáni adatokat.

    Agyalok, de nem jöttem rá, hogy mire gondolsz
    Gondoltam arra is, hogy karakterenként kellene beolvasni egy sorté és ha az épp beolvasott karakter ascii értéke chr$(44), akkor csere pl pontra?
    Mutasd a teljes hozzászólást!
  • Szia!

    Az állományom pontosvesszővel tagolt .CSV.
    Az a baj, hogy van benne 1-2 vessző is.

    Például név, címadatoknál:
    Kiss Gyula, Gyuláné
    vagy
    Budapest, Kertváros
    stb.

    Az állomány felépítése jó, csak 1-2 vessző mindig belecsúszik ...
    Mutasd a teljes hozzászólást!
  • Bocsi, de ha pontosvesszővel tagolt, akkor lehet benne akármennyi vessző.
    Lényeg, hogy az import a pontosvesszőt figyelje.
    Súgó..(Szöveges fájlok importálása és exportálása)

    Ez is megtalálható:
    A szöveges fájlban használt elválasztó módosítása
    Mutasd a teljes hozzászólást!
  • Szia!

    Nem ez a baj., szerintem nem teljesen jól írtam a kérdést, mert más is félreértette.

    Maga az állomány pontosvesszővel tagolt, kb 10 oszlop.
    Erre van kódom, ami az excelbe bepakolgatja az adatokat, úgy, hogy a pontosvessző lesz az elválasztó jel. Ami a pontosvessző után van, az a következő cellába kerül.
    Szóval. Az elválasztó jel a pontosvessző, ami minden sorban szerepel és ez így a jó, azonban kb 5-6 soronként előfordul, hogy egy (sima)vesszőt is tartalmaz a sor, például címeknél: "Budapest, Kelenföld" és itt van a gond, mert a vessző utáni adatokkal nem hajlandó dolgozni.
    Mutasd a teljes hozzászólást!
  • mert a vessző utáni adatokkal nem hajlandó dolgozni.


    Ki nem hajlandó dolgozni?
    Mutasd a teljes hozzászólást!
  • Esetleg csinálhatod még azt, hogy megnyitod a csv fájlt (OpenTextFile) , a teljes tartalmát beolvasod egy változóba (ReadAll), kicseréled a vesszőt egy másik karakterre (Replace) aztán visszaírod a változó tartalmát a fájlba (WriteLine)


    Nem tudom milyen a beolvasó programod, esetleg azt módosítani, hogy soronként olvasson be, utána szétvágni minden sort (Split) a pontosvessző mentén, majd az így kapott tömbön végiglépkedni ciklussal és beírni az excel megfelelő cellájába.

    Mutasd a teljes hozzászólást!
  • És ha betöltenéd soronként egymás alá 1-1 cellába és utána az eszközök > Szövegből oszlopok (textToColumns) funkcióval egyszerűen szétdobnád?
    Mutasd a teljes hozzászólást!
  • Erre van kódom, ami az excelbe bepakolgatja az adatokat

    Bocsi, de láthatnánk?
    Mutasd a teljes hozzászólást!
  • Szia!

    Mellékelem a kódot, de közben megoldódott a dolog SQL oldalról, Micunak válaszolom a megoldást, Te is megnézheted ebben a témában.

    Azért köszönöm, hogy próbáltál segíteni, mert a szándék a fontos!



    Open "e:\hsb_src" & keresesifilenev$ & ".csv" For Input As #1

    Do Until EOF(1)

    Input #1, sor$
    sor$ = sor$ & ";"

    i = i + 1
    If InStr(sor$, cellaertek$) > 0 Then
    Sheets("Adattábla").Cells(1, 1) = sor$

    'sor = a
    cellak = Split(sor$, ";")
    For oszlop = 0 To UBound(cellak)
    Sheets("Adattábla").Cells(2, oszlop + 1) = cellak(oszlop)
    Next
    a = a + 1
    End If

    Loop

    Close #1
    Mutasd a teljes hozzászólást!
  • Szia Micu!

    Megoldódott a dolog az SQL oldalon:
    A SELECT-*be építettem be a vessző cseréjét: semmire.

    replace('123123xxuu', '123'); -> ennek eredménye 'xxuu'

    Vagyis ebben az esetben az SQL SELECTben:

    replace(t.partner_address, ',')

    (Ez beépítve az oszlopok kiválasztásához).

    Most enyém a pont??
    Mutasd a teljes hozzászólást!
  • Tied. Mind a 0
    Mutasd a teljes hozzászólást!
abcd