Splitsen van veld, loopt niet helemaal lekker

Status
Niet open voor verdere reacties.

bikerron

Gebruiker
Lid geworden
9 mei 2009
Berichten
229
Hallo,
In het forum heb ik mooie functies gevonden om het splitsen van een veld mogelijk te maken. Voor het grootste deel is het mij gelukt het veld te splisten maar voor het andere deel lukt het ook maar geeft het een verkeerd resultaat.
Wat is het euvel:
In veld 1 zit een omschrijving die ik, a.h.v een separator "/", goed kan splitsen in een nieuw veld. (Niet alle records bevat deze seperator dus ik draai 2 queries.
In veld 2 zit een omschrijving die ik, a.h.v. een seperator "(", probeer te splitsen in een nieuw veld met de inhoud VOOR de "(", dat lukt niet, de inhoud NA de "(" komt in het nieuwe veld.
Ik moet dus in dat geval "terug kijken" in plaats vanaf de "(" de inhoud oppakken.
Voorbeeldje:
Veld 1..........Veld 2
aaaa/bbbb....cccc (dddd)

moet worden

Veld 1..........Veld 2.............Nieuw veld 1....Nieuw veld 2
aaaa/bbbb.....cccc (dddd).....bbbb...............ccccc

ik krijg echter:

Veld 1..........Veld 2.............Nieuw veld 1....Nieuw veld 2
aaaa/bbbb.....cccc (dddd).....bbbb...............(dddd)

Als voorbeeld heb ik mijn test databaseje erbij gedaan.
(e.e.a vloeit voort uit een omzetting naar een relationele databasje

Alvast bedankt voor de te nemen moeite,
Ronald
 

Bijlagen

  • splitsen.rar
    97,5 KB · Weergaven: 16
Ik ben nog even bezig met opnieuw installeren van mijn pc, dus ik moet het even uit het hoofd doen.... Welke techniek gebruik je voor de tweede splitsing? Want in essentie is die makkelijker als de eerste, die dus wel werkt!
Bijvoorbeeld met: Trim(Left([Veld2];Instr([Veld2];"(")-1))
 
Hallo Michel,
Das vlot....
Ik gebruik het volgende:
SELECT werven.Naamwerf AS Bron_naamwerf, steden.Plaatsnaam AS Bron_plaatsnaam, Mid([Naamwerf],(InStrRev([Naamwerf],"/")+1),Len([Naamwerf])) AS cascowerf, Mid(steden.plaatsnaam,(InStrRev(steden.plaatsnaam," ")+1),Len[([steden.plaatsnaam])) AS cascoplaats INTO cascowerf
FROM steden INNER JOIN werven ON steden.StedenID = werven.BouwplaatsID
WHERE (((werven.Naamwerf) Not Like '*/*') AND ((steden.Plaatsnaam) Like '* (*'));

Ik kom er vanavond niet verder meer aan toe, dus doe maar klam aan met je "PC-installatie", zal alles wel weer soepel lopen. :D
 
Gelukkig heb ik hier geen pc voor nodig...
met de functie Instr zoek je vanaf rechts naar een teken. Dat is prima als je het tweede deel van een string wilt hebben, zoals bij het eerste voorbeeld. In het tweede geval is dat echter helemaal niet nodig, omdat je het linker deel van de string zoekt, niet het rechter. Vandaar dat de eerste positie van je zoekstring bekend is (namelijk 1) en je alleen de lengte hoeft te weten. en die vind je met Instr, niet met InstrRev. (al krijg je die ook wel werkend).

Mid(steden.plaatsnaam,(InStrRev(steden.plaatsnaam," ")+1),Len[([steden.plaatsnaam])) AS cascoplaats
wordt dus:
Trim(Left(steden.plaatsnaam,(InStr(steden.plaatsnaam,"(")-1)) AS cascoplaats
 
Michel,
Het gaat bijna goed.
Wat is het euvel
Als ik met onderstaande selectie aan de gang ga dan hou ik in de "casco_land" landen over met een ) aan het einde, die wil ik niet.
SELECT werven.Naamwerf AS bron_naamwerf, Mid([Naamwerf],(InStrRev([Naamwerf],"/")+1),Len([Naamwerf])) AS cascowerf, steden.Plaatsnaam AS bron_Plaatsnaam, Left(Trim(steden.plaatsnaam),(InStr(steden.plaatsnaam,"(")-1)) AS Casco_plaats, Mid(steden.plaatsnaam,(InStrRev(steden.plaatsnaam,"(")+1),Len([steden.plaatsnaam])) AS Casco_land
FROM steden INNER JOIN werven ON steden.StedenID = werven.BouwplaatsID;

Ik dacht dit euvel met TRIM (')' FROM steden.plaatsnaam) te kunnen oplossen maar dat resulteert in een foutmelding van Access. (misschien dat Access deze functie niet ondersteund.
Dus... hoe haal ik dat )-kje aan het einde weg?

Daarnaast gaat het nog niet helemaal lekker als in de plaatsnaam zoiets als dit voorkomt:
Astrachan (Rusland)/Papendrecht
De plaats wordt gesplitst in: Astrachan dat is wat ik wil.
Het land wordt nu: (Rusland)/Papendrecht maar ik wil alleen Rusland
En ik wil dan weer in een ander veld: Papendrecht, dus de seperator is dan weer de "/".

Maar....
Als er GEEN "/" voorkomt dat krijg ik een #fout in die nieuwe kolom.
Bouwwerf.....cascowerf.......bron_Plaatsnaam....Casco_plaats............Casco_land
Kraayeveld...Kraayeveld......Barendrecht........... #Fout.......................Barendrecht

(indien je PC alweer actief is kun je e.e.a in de bijlage wellicht beter doorgronden.

Ronald
 
Ga vanavond de Office opnieuw installeren; dus met een beetje mazzel kijk ik er vanavond nog wel naar. Ik begrijp, dat je tekststring niet consequent is? Dus de ene keer met een land erbij, andere keren misschien niet, of in combinatie met een tekst achter een / teken?
 
Klopt.
Als er een GEEN / in veld 1 aanwezig is dan is dat ook niet in veld 2 maar daar kan wel iets tussen haken staan.
Als er WEL een / in veld 1 aanwezig is dan is dat OOK in veld 2 zo maar dan kan er VOOR de / een plaats met daar achter tussen haken een land staan en dat geld dan ook voor NA de /

Ronald
 
Je laatste query kan je zo oplossen:

Code:
Casco_land: IIf((InStr([steden].[plaatsnaam];"("))=0;"";Mid([steden].[plaatsnaam];(InStrRev([steden].[plaatsnaam];"(")+1);InStrRev([steden].[plaatsnaam];")")-InStrRev([steden].[plaatsnaam];"(")-1))
 
Michel,
Dat was hem, zeer bedankt.:thumb:
Ik ga de instructies eens op mijn gemak ontleden Ik denk dat ik ze in het conversie traject voor overige tabellen zeer goed kan gebruiken.
Bedankt voor je hulp.
Ik meld de vraag af.
Ronald
 
Hallo, er gaat toch nog iets niet helemaal lekker:
Ik heb het volgende record:
Bron_Bouwwerf Bron_Bouwplaats Afbouwwerf Afbouw_plaats Afbouw_Land
Begej Shipyard/De Groot Motoren Dordrecht BV Zrenjanin (Servië)/Dordrecht De Groot Motoren Dordrecht BV Dordrecht Dordrec
Begej Shipyard/Dok 138 NV Zrenjanin (Servië)/Antwerpen (België) Dok 138 NV Antwerpen (België) #Fout

De Bron_Bouwwerf en Bron_Bouwplaats bevatten seperator /, en alles NA deze / moet terecht komen in resp: Afbouwwerf Afbouwplaats en Afbouwland.

Afbouwwerf gaat goed;
Afbouwplaats gaat goed zo lang er maar GEEN (land) staat.
Afbouwland gaat NIET goed, merendeel zie ik daar de plaatsnaam (afgekort) in terug.

(sommige records zullen zeker fout blijven gaan, omdat de "Bron"foutieve data bevat, maar 90% is wel in orde)
Ronald
 
Wat ik (eigenlijk al gelijk in het begin) had bedacht was een splits functie die wat minder last heeft van het al dan niet aanwezig zijn van de verschillende scheidingstekens. Zo'n functie gebruikt de opdracht Split om een tekststring op te splitsen afhankelijk van een van tevoren in te stellen scheidingsteken, in jouw geval dus een / of een (.
Ik zal daar vanavond eens induiken, als ik aan installeren toekom...
 
Kreeg mail van Helpmij met de vraag of mijn vraag afgesloten kon worden, zoniet dan weer even onder de aandacht brengen.
Bij deze dus.

Ronald
 
Worden ze een beetje ongeduldig... Maar ik heb nog niks voor je :( Een sluitende procedure is ook best lastig! Maar hij speelt nog wel in m'n achterhoofd.
 
Michel,
Maak je niet al te druk, ik kan er mee leven als het niet 100% goed gaat. Een en ander is het gevolg van een conversie, en in automatiseringsland blijft er NA een conversie toch nog altijd wat handwerk over.
Ronald
 
Klopt, gegevens converteren is bijna niet volledig te automatiseren. Neemt niet weg, dat ik 'm zelf uiteraard ook zo compleet mogelijk wil hebben! Blijf er dus gewoon aan werken...
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan