[Access] kolom splitsen

Pagina: 1
Acties:
  • 244 views sinds 30-01-2008
  • Reageer

  • R Kuipers
  • Registratie: September 1999
  • Laatst online: 14-08 08:27
In een gekoppelde tabel heb ik een kolom met bestandsnamen. De opbouw van zo'n bestandsnaam is:
WET_020518_1_MAGENTA
Nu wil ik deze kolom middels een querie splitsen middels het '_' teken, dus een kolom WET, een kolom 020518, een kolom 1 en een kolom Magenta. Hoe doe ik dit?

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Bestaan alle namen uit vier delen?
Zo ja, dan bestaat er een split functie die je kan gebruiken. Die functie splitst een string in een array op een door de gebruiker symbool, hier dus de _. Uit die array neem je vervolgens het deel wat je in de kolom wil hebben.

Om de query overzichtelijk te houden (en zo snel mogelijk), maak je een module aan waarin je een functie zet die dit doet. Daarin maak je je array en de string die je wil splitsen een static:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Public Function NameSplit(sFilename As String, iPart As Integer) As String
Static sParts() As String
Static sFN As String

If Not sFN=sFilename Then
    sParts=Split(sFilename,"_") 'ik weet niet zeker of deze functie ook echt zo heet, zoek ff in de help
     sFN=sFilename
End If

NameSplit=sParts(iPart)

End Function

Dit is natuurlijk pseudocode, vul zelf even in wat de echte functienamen zijn die je nodig hebt. In je query kan je nu dit gebruiken:
code:
1
SELECT NameSplit([Filename],1) AS Deel1, NameSplit([Filename],2) AS Deel2 FROM FileNames

Door een static te gebruiken in de functie voorkom je dat je vaker dan nodig de relatief dure split moet uitvoeren.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Ik gebruik zelf ook veel liever split, maar je zou het eventueel zo kunnen doen:

Result = Mid(intPos, strOrigineel, instr(strOrigineel),"_" - 1)

  • R Kuipers
  • Registratie: September 1999
  • Laatst online: 14-08 08:27
Ga ik proberen. Bedankt

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Probleem met jou oplossing met Mid is het vinden van het tweede en verdere deel. Daarom de functie met de split...

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Onzin, als je intPos netjes bijhoud, kun je daar elke keer in aangeven vanaf waar hij moet beginnen moet zoeken.

Split blijft beter... :)

  • aj-san
  • Registratie: Februari 2001
  • Laatst online: 14-01 08:34
Op vrijdag 31 mei 2002 10:05 schreef ATS het volgende:
code:
1
SELECT NameSplit([Filename],1) AS Deel1, NameSplit([Filename],2) AS Deel2 FROM FileNames
Dit is als je Option Base 1 gebruikt, standaard is echter Option Base 0. De array begint dan bij 0, dus deel 1 is NameSplit([Filename],0), enzovoorts.

edit:
Ummm ok ik moet beter lezen volgende keer... hij wil de data in kolom 0 helemaal niet zien ;)

Don't try... do. Or do not. There is no try. -- Master Yoda

Pagina: 1