..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Podatki iz txt datoteke

Pomoč pri izdelavi makrov

Podatki iz txt datoteke

OdgovorNapisal/-a Stenly » Če mar 05, 2009 1:48 pm

Pozdravljeni

Ne vem kako bi pobral del podatkov iz txt datoteke v excel, za nadaljno obdrlavo :cry: .

V službi imamo mašino za utrujanje materiala. Ta dela nekako v ciklusih. Podatke beleži v txt datoteko nekako tako:

prvi stolpec = čas
drugi stolpec = številka ciklusa
tretji stolpec = pomik 1
četrti stolpec = pomik 2
peti stolpec = sila
šesti stolpec = pomik 3

Težava mi je v tem, da je veliko vrstic (cca 20000 ciklusov po cca 100 vrstic) in da celotne datoteke ne morem uvozit v excel.
Želel pa bi uvoziti (poljubno) vse podatke npr. od 11111-ega ciklusa, pa do 11121 ciklusa.
Prosil bi za kak namig :? .
Stenly
 
Prispevkov: 223
Pridružen: Sr jul 27, 2005 11:29 pm



Matjazev.NET
 

OdgovorNapisal/-a admin » Če mar 05, 2009 3:14 pm

Nekaj takšnega, kot je zapisano spodaj:
Koda: Izberi vse
Sub NekajTaksnega(ciklus As String)
 
  Dim prebranaVrstica As String
  Dim vrsticaVExcelu As Long
  Dim razbito
 
  vrsticaVExcelu = 0
  Open "<ime vhodne datoteke>" For Input As #1
  Do While Not EOF(1)
    Line Input #1, prebranaVrstica
    razbito = Split(prebranaVrstica, ";")
   
    If (razbito(1) = ciklus) Then
      Cells(vrsticaVExcelu, 1) = prebranaVrstica
      vrsticaVExcelu = vrsticaVExcelu + 1
    End If
  Loop
  Close #1

End Sub


To je praktično že rešitev. Popraviti je potrebno samo ime datoteke, da bo ustrezala realnemu stanju in pa ustrezno popraviti parameter v funkciji Split.

Funkcija Split namreč razbije vhodni niz na posamezne elemente. Ob tem predpostavlja, da so elementi ločeni z nekim znakom - jaz sem predpostavil podpičje, zato Split(xxxx, ";"). Če so stolpci ločeni z drugim znakom, potem to ustrezno zamenjajte. TO JE VSE.

Kot vidite, vam bo funkcija v aktivni zvezek od vrstice 1 dalje prebrala vse zapise za izbrano ciklus.
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3537
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a Stenly » Pe mar 06, 2009 10:26 am

Se zahvaljujem za odgovor.

Se mi je pa zataknilo (pač zaradi mojega neznanja) :oops: .

Kodo sem dopolnil.
Koda: Izberi vse
Sub NekajTaksnega(ciklus As String)
 
  Dim prebranaVrstica As String
  Dim vrsticaVExcelu As Long
  Dim razbito
 
  vrsticaVExcelu = 0
  Open "C:\Test_x\Test.txt" For Input As #1
  Do While Not EOF(1)
    Line Input #1, prebranaVrstica
    razbito = Split(prebranaVrstica, "tab")
   
    If (razbito(1) = "1.000000") Then
      Cells(vrsticaVExcelu, 1) = prebranaVrstica
      vrsticaVExcelu = vrsticaVExcelu + 1
    End If
  Loop
  Close #1

End Sub

Žal pa ne dela. Stolpci so ločeni s tabulatorjem (pa ne vem kako to napisat. Ime ciklusa je 1.000000, pa tudi to ne vem, če sem prav vpisal (v narekovajih). Prosim še za malo pomoči.

LP
Stenly
 
Prispevkov: 223
Pridružen: Sr jul 27, 2005 11:29 pm

OdgovorNapisal/-a admin » Pe mar 06, 2009 10:49 am

Koda
Koda: Izberi vse
  razbito = Split(prebranaVrstica, "tab")

vam razbije niz na podnize, ki so ločeni z besedo 'tab' in ne znakom 'tab', ki je en sam znak z kodo 9. Pravilna koda je torej:
Koda: Izberi vse
  razbito = Split(prebranaVrstica, chr(9))


Kar pa se tiče ciklusa, ga morate pa natančno napisati. Če je '1000000' potem morate zapisati '1000000' in ne '1.000.000' ali '1.000000'...
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3537
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a Stenly » Pe mar 06, 2009 12:26 pm

Hvala za namig in pojasnilo :D :D :D .

Lp
Stenly
 
Prispevkov: 223
Pridružen: Sr jul 27, 2005 11:29 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 2 gostov

cron