VBA kóddal történő TXT fájl importálás

VBA kóddal történő TXT fájl importálás
2013-01-13T13:07:30+01:00
2013-01-24T12:54:52+01:00
2022-10-24T10:00:31+02:00
  • Köszi egy kicsit nehéz volt értelmeznem de sikerült köszönöm a segítséget de jó nektek hogy így kenitek vágjátok a témát .
    Befizetnék valahová egy programozói kurzusra mostanra a DO While, if, case, for next , és egyéb ilyen alapokkal tisztába lettem de ez a "txt" kezelés felbosszantot egy kicsit hogy tehetetlen vagyok szóval ha van valaki aki prg alapozást tartana vba-ból érintett témák :

    alkalmazás megnyitás érték átadással ..

    txt álomány kezelés karaktercserék, sor törlések , oszlop törlések vagy áthelyezése másik txt állományba,

    DAO recordset és miegymás

    tömb kezelés ...

    Még egyszer köszi mindenkinek
    Mutasd a teljes hozzászólást!
  • Próbáld meg ezt.
    Gond van a kódlappal (charset) de azt majd utólag beállitod.

    Sub FileConvert() Dim Document, OutDocument As String Dim i, j As Long Dim betu As String Set FSO = New Scripting.FileSystemObject Set fst = CreateObject("ADODB.Stream") FileName = GetFileDialog("", "*.txt") If FileName = "" Then Exit Sub fst.Type = 2 fst.Charset = "UTF-8" fst.Open fst.LoadFromFile FileName Document = fst.ReadText fst.Close OutDocument = "" i = 0 k = 1 Do i = InStr(i + 1, Document, "&#", vbBinaryCompare) If i > 0 Then j = InStr(i + 1, Document, ";", vbBinaryCompare) betu = Mid(Document, i + 2, j - (i + 2)) OutDocument = OutDocument + Mid(Document, k, i - k) + ChrW(Val(betu)) k = j + 1 End If Loop Until i = 0 OutDocument = OutDocument + Mid(Document, k, Len(Document) - k) Document = "" i = 0 k = 1 Do i = InStr(i + 1, OutDocument, "@", vbBinaryCompare) If i > 0 Then j = InStr(i + 1, OutDocument, "@", vbBinaryCompare) If (j - i) < 100 And (j - i) > 3 Then betu = Mid(OutDocument, i, j - i) If Len(betu) - Len(Replace(betu, ";", "")) = 1 Then betu = Replace(betu, ";", ", ") Document = Document + Mid(OutDocument, k, i - k) + betu k = j + 1 End If End If End If Loop Until i = 0 Document = Document + Mid(OutDocument, k, Len(OutDocument) - k) fst.Charset = "utf-8" fst.Open fst.WriteText Document fst.SaveToFile "C:\out.txt", 2 fst.Close End Sub
    Mutasd a teljes hozzászólást!
  • Dehogy akarom excelbe beolvasni azt a mondatot inkább csak viccnek szántam mert milyen egyszerű is lenne az életem ha azt mondanám a titkárnőnek hogy excelben addig bogarássz amíg minden sorba egymás alá kerülnek az összetartozó adatok havonta csak 2000-3000 sort kell átnézni uszkve 300 oszlopban ....

    Hogy be tudom e illeszteni jó kérdés 5% esélyt adok rá
    megpróbálkoznék vele és honorálnám a segítségek.
    Mutasd a teljes hozzászólást!
  • Nem értem miért akarod excelbe beolvasni.
    Importálás előtt VBA-val kijavitod a szöveget és akkor nem kell a mezőket tologatni.
    Meg is csinálnám de nekem nincs fenn az access, csak word. Végülis a VBA funkció ugyanaz accessban mint wordben csak kérdés hogy be tudnád-e illeszteni?
    Mutasd a teljes hozzászólást!
  • Ezen agyalok én is mert a végén mégis rá kell fanyalodok az Excelre.
    1. Csinálók egy kód csere táblát ebből a már megtalált hibát okozó karaktereket kicseréltetem
    2. Lefuttatom a @-@ közötti ";" cserét megjegyzem az is okozhat gondot mert az EMAIL és a WEB cím oszlop egymás mellett van és láttam olyan adatsort ahol az egyiket az EMAIL a másikat a WEB cím oszlopba rakta a két mail. Ezért ennél a cserénél pontosítani kell hogy melyik két ";" között legyen de ehhez meg kellene számolni a sorban lévő összes pontos veszőt biztosnak kellene lenni abban hogy a sor nem tartalmaz hibás karakter miatti extra pontosvesszőt , vagy vizsgálom az "@" talált mező elötti és utáni adattípus hogy biztos lehessek abban hogy az hol van.
    3. Ezek után beolvasom az egészet megnézem hol van importálási hiba ( adattípus eltérés , kötött értéket felvehető mezők adattartalom ellenőrzésével ) azokat a sorokat átrakom egy másik táblába és editálja a titkárnő . !! (de mennyivel egyszerűbb egy oszloppal arrébb rakni az adatot Excelben mint itt) Accessbe kellene írni egy ctrl+" " rutint hogy ha megnyomja akkor egy oszloppal jobbra másol minden ha másik bill. kombinációt nyom akkor balra a kijelölt cellától. Ja és egy harmadik bill. parancsal meg a kijelölt részt berakja a küd csere táblába ....

    Elméletben jó vagyok de ebből egy prg sort se tudnék megvalósítani meg tudod nekem így ezt csinálni ? vagy tudsz adni valamilyen támpontot hol tanulhatom meg ezeket a dolgokat hogy kell ennek nekiállni?
    Mutasd a teljes hozzászólást!
  • Mostmár csak az a kérdés hogy melyik mód felel meg legjobban.
    1. kijavitani a txt file-t és importálni az egészet egyből.
    2. beolvasni soronként, belerakni egy tömbe, és beirni a bázisba.
    Mutasd a teljes hozzászólást!
  • Igen a jó öreg excel szeretem használni de szeretnék egy szép megoldást excel nélkül ....
    Mutasd a teljes hozzászólást!
  • Ezt meg lehet oldani bármivel, nem nehéz kicserélni. A & #337;-et chr(337) re és az email közötti ";"-t ","-re.
    Mutasd a teljes hozzászólást!
  • Lehet hogy én vagyok a maki

    Szó sincs róla.
    Bocsi, én lőttem mellé, mert rögtön Access-be akartam gyömöszölni.
    Excel-be importálva, ill. csv-ként megnyitva véled azonos eredményre jutottam.
    colt:
    Talán célszerű lenne előbb excel-be töltened az adatokat, s ott böngészni/javítani a hibákat.
    Például a jobbra-csúszások azonnal felderíthetők (adat a fejléc nélküli oszlopban).
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Most igy utólag a &#xxx; is eltolja a sorokat de ez a másik eset.
    Mutasd a teljes hozzászólást!
  • Lehet hogy én vagyok a maki de 10062344.txt nekem igy jött ki. Elég furcsa a kódolás és érthetetlen, de ez van. Notpad is azt mutatja. Ebbőla a példából ezt kaptam. OpenOffice Calc-al importáltam. De mindegy, a pontosvessző ott is ugyanaz.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Jól látot olyan sor is van benne aminek a végén balra tolódik az adat és azt sem tudom miért
    Excel importnál látszik ! nem tudom hogy ez mérvadó de Accessbe is ha beimportálom ugyan így elcsuszik
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Csak azok a sorok tolódnak el amelyek két e-mailt tartalmaznak.

    Biztos vagy benne?
    Tán tévedek, de szvsz az első négy sor még úgy ahogy, ám az ötödik már a 125. kar. után szépen belerondit, míg az előbbiek a 328. után dobják fel a talpukat..
    Mutasd a teljes hozzászólást!
  • Így már minden világos. Tulajdonképp nem is látom hogy mi a gond az egésszel. Csak azok a sorok tolódnak el amelyek két e-mailt tartalmaznak. Azt már az előbb említettem hogy könnyű kijavítani. A többi az rendbe van.
    Mutasd a teljes hozzászólást!
  • Hát ez így teljesen használhatatlan
    Mutasd a teljes hozzászólást!
  • Itt van az eredeti txt csak annyit tettem hogy lecsökkentettem a rekordszámot ügyelve arra hogy hibás sorok maradjanak benne és adatvédelem miatt karaktercseréket hajtottam végre benne.
    Az eredeti több mint 2 mb.
    Kérdésem hozzátok ha már így biztattok hogy minden kérdésemre igen a válasz akkor
    Ki?
    Mikor?
    Mennyiért csinálja meg nekem és magyarázza el egy kicsit hogy működik?
    lehet hogy ha látom megértem és nem is nagyon kell kérdeznem de mivel ilyent sose csináltam nem programoztam ezért ez nem biztos.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Gondolom, e mintát már te formáztad, ami csal egy picit.
    Ugye egyrészt pl. a Cég-nél szóközök kerültek a rövidebb megnevezés után,viszont a városnál már nincs (mindkettő Budapest), ám mi van ha befut egy 'Kiskunfélegyháza', akkor az csonkolódik?
    Érdemes lenne egy valós lista csatolása 10-15 sorral, a személyes adatok kiikszelésével (pl. email).
    Mutasd a teljes hozzászólást!
  • A minta.txt alapján elég egyszerűnek tűnik:
    1. Az "ő" (& # 337 ;) és a többi ilyen karakter unicode kódolással van kiírva.
    2. A mezők szélessége fix, így a ';' helye alapján egyértelmű, hogy mező határoló vagy tartalom! legalábbis a mellékelt txt állomány alapján.

    Tehát az importálás vagy konvertálás során mindkét dolgot automatikusan (emberi beavatkozás nélkül) ki lehet javítani!

    A későbbi 5 kérdésedre igen a válasz (mindegyikre)
    Mutasd a teljes hozzászólást!
  • Mindegyik kérdésedre a válasz igen, vagyis valahogy mindegyiket meg lehet oldani.
    Azért azt a txt filet egy kicsit jobban megvizsgálnám. Léteznek nem látható characterek mint pl tab LF CR.
    Nyisd meg egy HEX editorral és nézd meg. Legyünk biztosak benne hogy nincs jobb mód arra hogy szétválasszuk a mezőket.
    Mutasd a teljes hozzászólást!
  • Valamilyen egyedi rendszerből generálják a TXT amivel a számlázást és nyilvántartást végzik de alapból nem releváns. Értem a felvetésedet hogy mit hogyan lehetne automatizálni hogy alapból ki legyenek javítva a hibák és ezek nagyon jó ötletek de nekem nincs meg hozzá a programozói tudásom és még azt se tudom hogy egyáltalán vba-ba meg lehet e oldani.
    Hiányzó tudásom ehhez a feladathoz
    1. Lehet e rekordonként importálni ?
    2. Lehet e javítva visszaíratni a txt fájlba ?
    3. Hogy lehet importálás előtt a karaktercseréket a txt ben végrehajtani az Access-ből?
    4. hogy lehet a txt rekordjait megszámolni és kiírni egy táblába hogy melyik rekord hány oszlopot tartalmaz?
    5. hogy lehet egy tábla mezőjének adattípusához hasonlítani a txt fájlban lévő azzonos mezőnek az adattípusát ?
    Ha lehet ezeket akkor hogyan ?
    Csak ennyi hiányzik
    Mutasd a teljes hozzászólást!
  • Ezek a ";" valóban furcsán vannak betéve és igy ahogy van nem nagyon tudsz mit csinálni velük.
    Az escape betű utáni ";" nem gond mert pl. ő ami &# val kezdődik annak ";" a vége. Az emailt is meg lehet oldani mert ha két @ között van egy ";" az akkor csak ",".
    Engem inkább az érdekel hogy honnan jön ez a txt file? Úgy néz ki mintha excelből lenne exportálva. Tudsz-e másmilyen filet beszerezni? Jobb megoldás volna.
    Mutasd a teljes hozzászólást!
  • Köszi sajnos nem ilyen egyszerű a minta egy csökkentett változat az alap txt-ben közel 300 oszlop van és vagy 15 mező kritikus amelyekben pl email cím néha 3-4 email is beleírnak ";" elválasztva így nehéz lenne meghatározni hogy hol kezdődik és mit kell kicserélni a "replace" segédtábla meg azt a hibát okozná hogy folyamatosan bővíteni kellene és itt csak egy titkárnő végezné a feladatot.
    Én arra jutottam eddigi agyalás gyanánt, hogy beimportálnám a txt úgy ahogy van megnézném hogy melyik sorban van több oszlop és hogy melyik sor tartalmaz olyan mezőt ahol a mező alap adattípusától eltérő adat típus van , majd ezeket a sorokat egyesével feldobatnám a titkárnőnek hogy javítsa utána visszaíratnám a txt-be és újra importálnám mindaddig amíg nincs hiba.
    De sajnon mivel nem vagyok programozó, ötletem sincs, hogy kellene ezt leprogramozni vba-ban csak a riportokhoz szükséges sql utasítások és ehhez szükséges vba parancsokkal vagyok tisztában.
    Nagyon hálás lennék ha ezt valaki megtudná nekem oldani akár fizetősen is főleg ha elmagyarázza hogy is működik és milyen vba paracsokat kell és hogyan használni. Vagy ha nálatok jelentkezem a holnap induló tanfolyamra "Microsoft Access 2010 alkalmazásfejlesztés" ott ezt meg tudom e tanulni ?
    Mutasd a teljes hozzászólást!
  • A ";"-t nem fogod tudni eldönteni, hogy most mezőhatároló vagy a szövegben van.

    Illetve egy esetben igen, ha csak egy mezőben lehet ilyen, mert ha pl. csak a 3-ban, akkor előröl az első kettőt leveszed (instr és mid vagy split és megmondod, hogy hányat), a végétől leveszed amíg nem érsz el az 3 végén lévő ";"-ig. (instrrev, right, len)

    Ami mardt az a 3.

    --
    A speciális karakterekre meg megírsz egy(pár) replace-t.

    Én egy tömbbe beraknám miről, egy másikba mire cseréljen, és ciklussal végigmennék, (akár még a szétvágás előtt)
    Mutasd a teljes hozzászólást!
  • Itt vala próbáltam az első hozzászóláshoz is csatolni de teljesen szabványos txt csak a benne lévő adatok is tartalmaznak ";" ami a határoló karakter ez okozza a problémát ahogy irtam is.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Légyszi tedd már fel azt a txt filet hogy mi is lássuk hogy miről van szó.
    Fontos hogy tudjuk pontosan miljen a szerkezete.
    Mutasd a teljes hozzászólást!
  • Adott egy TXT fájlba kiimportált adathalmaz rengeteg mezővel amelyből access segítségével riportokat szeretnék készíteni.
    Probléma hogy a txt fájl ";" határolt, így ha a cellákban az adatok között szerepel a pontosvessző ott elcsúszik így az alap 150 oszlopból néha akár 160 lesz és más oszlopba kerülnek az adatok. A másik hogy valamilyen balga kódolás miatt a "ő" betű helyett "ő" ez a karaktersor van amelyben szintén van &#8220;;" vessző és még sok hasonló apróság ...
    Alapvető importálás "DoCmd.TransferText" ... parancsot alapértelmezésben ismerem de nem tudom hogy vannak e extrái.
    Feladat az lenne hogy beimportálni a txt fájlt úgy hogy ha adattípus eltérés van akkor mutassa meg az adott sort, ha több oszolpni adat van egy sorba mint a céltábla akkor is mutassa meg az adott sort és legyen lehetőség ezek javítására karakter átírásra és utána importálja be ezeket a sorokat
    Minta TXT pl
    Cég;b;cím;irsz;város; email;o
    Bosch Kft.; ;Gyömrői 120;1103;Budapest;D.KARA@HU.BOSCH.COM;D.KARA@GMAIL:COM;H
    DELOITTE; ;DOZSA GY UT 84/C;1068;BUDAPEST;ALAY@DELOITTECE.COM;H
    ;
    Ebben a mintában látszik hogy az első adatsorban van két importálási hibát okozó dolog
    1 "ő" helyett "&#337"
    2. email címeket ";" választotta el

    Minden fajta segítség érdekel még a fizetős is sajnos muszájból rá vagyok kényszerülve hogy ezt a részt is én oldjam meg nem csak a riportkészítést és sajna nem vagyok programozó
    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