HWSW Informatikai Kerekasztal: egymás alatti lista mezőkből - HWSW Informatikai Kerekasztal

Ugrás a tartalomhoz

Mellékleteink: HUP | Gamekapocs

Oldal 1 / 1
  • Nem indíthatsz témát.
  • A téma zárva.

egymás alatti lista mezőkből egymás mellettit kellene csinálni

#1 Felhasználó inaktív   pgyafi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 8.686
  • Csatlakozott: --

Elküldve: 2008. 02. 08. 19:49

Win xp, office2003

van ilyen lista:

cég név1
város1
utca1
irányító szám1
-üres-
cég név2
város2
utca2
irányító szám2
-üres-
cég név3
város3
utca3
irányító szám3
-üres-
cég név4
város4
utca4
irányító szám4

ebből kellene valahogy ilyet csinálni:
cég név1;város1;utca1;irányító szám1
cég név2;város2;utca2;irányító szám2
cég név3;város3;utca3;irányító szám3
cég név4;város4;utca4;irányító szám4

Az elválasztó karakter lehet más is.

Ötlet?
Olyan megoldás kellene ami egyszerűen is megy.

#2 Felhasználó inaktív   Root_Kiskacsa 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 3.379
  • Csatlakozott: --

Elküldve: 2008. 02. 08. 20:43

Gondolom Excel, mert az lemaradt. Ez szerintem erősen VB makróra való feladat.
Sub Listazo()
    Dim sh As Worksheet, ash As Worksheet, ForrasSor As Long, CelSor As Long, UtolsoSor As Long
    Set ash = ActiveSheet
    
    ' Új lap létrehozása Eredmény néven.
    Set sh = ThisWorkbook.Sheets.Add
    sh.Name = "Eredmény"
    
    ' Adatok átvétele
    ForrasSor = 1
    CelSor = 1
    UtolsoSor = ash.Cells(65535, 1).End(xlUp).Row
    
    For ForrasSor = 1 To UtolsoSor
        If Len(ash.Cells(ForrasSor, 1)) = 0 Then
            'Üres cella esetén levesszük az utolsó kirakott adat végéről a pontosvesszőt, majd új sorba lépünk.
            sh.Cells(CelSor, 1) = Left(sh.Cells(CelSor, 1), Len(sh.Cells(CelSor, 1)) - 1)
            CelSor = CelSor + 1
        Else
            'Nem üres cella esetén másoljuk a cella tartalmát a kimeneti sor végére.
            sh.Cells(CelSor, 1) = sh.Cells(CelSor, 1) & ash.Cells(ForrasSor, 1) & ";"
        End If
    Next
    'Még az utolsó kimenő sor végéről levesszük a pontosvesszőt.
    sh.Cells(CelSor, 1) = Left(sh.Cells(CelSor, 1), Len(sh.Cells(CelSor, 1)) - 1)
End Sub


A kérdést pedig lehetőleg ebben a topicban folytassuk.
Pen-drive-on, notebookon, PDA-n kizárólag máshonnan reprodukálható/visszamásolható adat legyen!
Ami hordozható, az nem megbízható!

#3 Felhasználó inaktív   pgyafi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 8.686
  • Csatlakozott: --

Elküldve: 2008. 02. 08. 21:44

Idézet: Root_Kiskacsa - Dátum: 2008. febr. 8., péntek - 21:43

Gondolom Excel, mert az lemaradt. Ez szerintem erősen VB makróra való feladat.
...
A kérdést pedig lehetőleg ebben a topicban folytassuk.

Köszi, megnézem.
Excel nem maradt le, valami parancssoros megoldásnak jobban örülnék, így ne ott folytassuk.

#4 Felhasználó inaktív   Root_Kiskacsa 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 3.379
  • Csatlakozott: --

Elküldve: 2008. 02. 09. 18:28

Idézet: pgyafi - Dátum: 2008. febr. 8., péntek - 21:44

Köszi, megnézem.
Excel nem maradt le, valami parancssoros megoldásnak jobban örülnék, így ne ott folytassuk.

Az elején megtévesztett, hogy említetted az Office 2003-mat, de más bemeneti/kimeneti formátumot nem. A kód kis változtatással akármire átalakítható, az algoritmus lényegében ugyanaz. Ha parancssorból akarod használni, ahol a bemenet és a kimenet is egy-egy txt, akkor a vbs-t ajánlom. Így néz ki a korábbi kód vbs-ben, mentsd el valamilyen vbs kiterjesztésű fájlnéven:
Dim BeolvSor, KimenoSor, Forras, Cel, fso

If Wscript.Arguments.Count < 2 then
   Wscript.Echo "Paraméternek meg kell adni a forrásállomány és a célállomány nevét."
   WScript.Quit 1
End If

' Felkészülés: fájlok nyitása
Set fso = CreateObject("Scripting.FileSystemObject")
Set Forras = fso.OpenTextFile(Wscript.Arguments(0))
Set Cel = fso.OpenTextFile(Wscript.Arguments(1), 2, True)

KimenoSor = ""

' Adatok átvétele
CelSor = 1
Do Until Forras.AtEndOfStream
   BeolvSor = Forras.ReadLine
   If Len(BeolvSor) = 0 Then
      'Üres sor esetén levesszük az utolsó pontosvesszőt a kimenetvégéről, majd kiírjuk a kimenetet - feltéve, hogy nem volt eleve üres.
      If KimenoSor <> "" Then KimenoSor = Left(KimenoSor, Len(KimenoSor) - 1)
      Cel.WriteLine KimenoSor
      KimenoSor = ""
   Else
      'Nem üres cella esetén másoljuk a cella tartalmát a kimeneti sor végére.
      KimenoSor = KimenoSor & BeolvSor & ";"
   End If
Loop

'Még az utolsó kimenő sort ki kell írni.
If KimenoSor <> "" Then KimenoSor = Left(KimenoSor, Len(KimenoSor) - 1)
Cel.WriteLine KimenoSor

' Befejezés előtti tisztogatás
Forras.Close
Cel.Close
Set Forras = Nothing
Set Cel = Nothing
Set fso = Nothing

Valószínűleg megoldható kis ügyeskedéssel batchben is, de az nem az erősségem.
Pen-drive-on, notebookon, PDA-n kizárólag máshonnan reprodukálható/visszamásolható adat legyen!
Ami hordozható, az nem megbízható!

#5 Felhasználó inaktív   pgyafi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 8.686
  • Csatlakozott: --

Elküldve: 2008. 02. 09. 19:26

Idézet: Root_Kiskacsa - Dátum: 2008. febr. 9., szombat - 19:28

Valószínűleg megoldható kis ügyeskedéssel batchben is, de az nem az erősségem.

:respect:

teljesen jó!
köszönöm!

Téma megosztása:


Oldal 1 / 1
  • Nem indíthatsz témát.
  • A téma zárva.

1 felhasználó olvassa ezt a témát.
0 felhasználó, 1 vendég, 0 anonim felhasználó