HrSteen Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 Noen tips på hvordan jeg skal klare å formattere dato til dette formatet DDMMYYYY når man ikke helt vet hvilken datoformat man får inn? Dvs 1/2/2006 01.2.2006 1-2-06 01-2-2006 1.02.06 01.02.2006 1.2.2006 1.2.6 osv Lenke til kommentar
aadnk Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 Du kan benytte funksjonen CDate til dette: CDate("1.2.2006") Lenke til kommentar
HrSteen Skrevet 23. mai 2006 Forfatter Del Skrevet 23. mai 2006 Desverre. på enklte datoer så lager den verdens merkeligste dato. Lenke til kommentar
aadnk Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 Kan det være fordi datoen er skrevet med MMDDYY? Og hvorfor kan du ikke la det være kun et datoformat? Dersom dette er inndata fra brukeren, kan du kanskje bruke IsDate() for å sjekke om datostrengen er korrekt. Lenke til kommentar
HrSteen Skrevet 23. mai 2006 Forfatter Del Skrevet 23. mai 2006 Fordi det er en analysekomponent til ett OCR program.Og du aner ikke hvor mange måter man kan skrive/tolke en dato. Men tror jeg klarte å lage noe til slutt som fungerer tilfredstillende. Lenke til kommentar
Richard87 Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 ka du ikke ta ett og ett tall, og legge dem sammen? stort sett er det 2 tegn i en dato som ikke er et tall, eventuelt 1, viss de har utelatt arstallet forst kan du kjore en loop pa antall tegn som ikke er ett tall, og sa trekke fra de to faregande tallene PseudoCode: Dim lDay as long, lMonth as long, lYear as long scur = mid(strDato,1,1) 'finn dag... Dim lCur as long for lCur = 1 to len(strDato) If mid(strData,Lcur,1) <> ettNummer then lDay = left(strDato, lcur - 1) strDato = mid(strDato, lcur + 1) exit for next lCur 'Finn Maaned... for lCur = 1 to len(strDato) If mid(strData,Lcur,1)<> ettNummer then lMonth = left(strDato, lcur - 1) strDato = mid(strDato, lcur + 1) exit for next lCur if len(strDato) > 0 then lyear = strDato end if kan sikkert forbedres litt Lenke til kommentar
Harald Staff Skrevet 25. mai 2006 Del Skrevet 25. mai 2006 Sub test() MsgBox DateValue("1/2/2006") MsgBox DateValue("01.2.2006") MsgBox DateValue("1-2-06") MsgBox DateValue("01-2-2006") MsgBox DateValue("1.02.06") MsgBox DateValue("01.02.2006") MsgBox DateValue("1.2.2006") MsgBox DateValue("1.2.6") End Sub Det denne ikke håndterer er rene tall som 0102 , 010206 eller 01022006. Det er ikke så vrient å skrive kode for sånt. HTH. Beste hilsen Harald Lenke til kommentar
MadGonzo Skrevet 5. juni 2006 Del Skrevet 5. juni 2006 (endret) du lager deg unødvendige problemer det er bare en dato dessuten er det umulig å forutsi alle typer datoer, siden du mest sannsynlig jobber med menneskelig input hvorfor prøve engang...(?) CDate tar de fleste Endret 5. juni 2006 av MadGonzo Lenke til kommentar
HrSteen Skrevet 5. juni 2006 Forfatter Del Skrevet 5. juni 2006 (endret) En dato er ikke bare en dato. Jobber ikke med menneskelig input, men OCR av menneskelig/data output. Og CDate tok ikke de fleste, derfor måtte jeg bygge opp min egen analysekomponent. Og det ser ut som den virker. Endret 5. juni 2006 av stoners Lenke til kommentar
[space] Skrevet 16. juni 2006 Del Skrevet 16. juni 2006 En dato er ikke bare en dato. Jobber ikke med menneskelig input, men OCR av menneskelig/data output. Og CDate tok ikke de fleste, derfor måtte jeg bygge opp min egen analysekomponent. Og det ser ut som den virker. 6244799[/snapback] Moro når en da kommer over brukere som ikke har norsk datoformatering i oppsettet på maskinen sin. Har slitt så sinnsykt med å takle både norsk og amerikansk dato... 01/05/06 Om dette er 1. mai eller 5. januar kommer helt an på hvordan brukeren har satt opp maskinen.... (Hvertfall med CDate funksjonen) Lenke til kommentar
HrSteen Skrevet 16. juni 2006 Forfatter Del Skrevet 16. juni 2006 (endret) Heldigvis er datooppsettet relativt like på alle pc'ene der denne komponenten skal kjøre.. (tror jeg ) Endret 16. juni 2006 av stoners Lenke til kommentar
Harald Staff Skrevet 16. juni 2006 Del Skrevet 16. juni 2006 Prøvde du noengang DateValue som jeg viste deg ? Den håndterer d/m/å - m/d/å -oppsettet uten problemer og forøvrig alle eksemplene dine. Beste hilsen Harald Lenke til kommentar
HrSteen Skrevet 16. juni 2006 Forfatter Del Skrevet 16. juni 2006 PRøvde ikke ditt oppsett nei, da jeg fant ut en annen måte å gjøre det på. Men har det i bakhodet. takk. Lenke til kommentar
[space] Skrevet 16. juni 2006 Del Skrevet 16. juni 2006 Prøvde du noengang DateValue som jeg viste deg ? Den håndterer d/m/å - m/d/å -oppsettet uten problemer og forøvrig alle eksemplene dine. Beste hilsen Harald 6320565[/snapback] Du har ikke en link til meg også på det der? Lenke til kommentar
Harald Staff Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 (endret) Det står lenger opp i tråden, fra 26.5. Kanskje dere ser noe annet enn jeg gjør. Men her er en enda tydeligere demo: Sub test() Dim D As Date Dim S As String S = "1/2/2006" D = DateValue(S) MsgBox D, , S S = "1-2 2006" D = DateValue(S) MsgBox D, , S S = "1/2-06" D = DateValue(S) MsgBox D, , S S = "01.2.2006" D = DateValue(S) MsgBox D, , S S = "1-2-06" D = DateValue(S) MsgBox D, , S S = "01-2-2006" D = DateValue(S) MsgBox D, , S S = "1.02.06" D = DateValue(S) MsgBox D, , S S = "01.02.2006" D = DateValue(S) MsgBox D, , S S = "1.2.2006" D = DateValue(S) MsgBox D, , S S = "1.2.6" D = DateValue(S) MsgBox D, , S S = "1/2" D = DateValue(S) MsgBox D, , S S = "Feb 01" D = DateValue(S) MsgBox D, , S S = "1.feb" D = DateValue(S) MsgBox D, , S S = "1 feb 06" D = DateValue(S) MsgBox D, , S S = "1 Februar" D = DateValue(S) MsgBox D, , S End Sub Datevalue håndterer ikke rene tall som 0102 , 010206 eller 01022006. Det er ikke så vrient å skrive kode for sånt. PS. Pussig nok kommer jeg over en søt artikkel om disse tings tilblivelse bare minutter etter at jeg har sendt dette. Her: http://www.joelonsoftware.com/items/2006/06/16.html HTH. Beste hilsen Harald Endret 17. juni 2006 av Harald Staff Lenke til kommentar
[space] Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 (endret) Hmm, Denne fungerer helt til du setter standards and formats til English U.S. da gjør den akkurat de samme feilene, ettersom den da tror 01/02/06 er 2 januar. Som en kan se slik: S = "1/2/2006" D = DateValue(S) MsgBox "day: " & Day(D) & " month: " & Month(D) & " year: " & Year(D), , S Altså om en nordmann har satt op maskinen sin feil, vil feil inntreffe. I tillegg klarte ikke denne rutinen å håndtere datoer med . om maskinen er satt opp med engelske datoformater. Har fått en beskrivelse av en funksjon her: https://www.diskusjon.no/index.php?showtopic=571460 som kanskje fungerer bra. Har ikke fått testet den ennå... edit: Testet nå og den virker bulletproof! Byttet mellom de forskjellige datoformatene og den kommer ut med rett dato uansett. Hvorfor testet jeg ikke denne tidligere?! Endret 17. juni 2006 av [space] Lenke til kommentar
Harald Staff Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 (endret) Det er jo ikke sånn. I USA og på en US-engelsk oppsatt maskin vil strengen S = "1/2/2006" bety nettopp 2. januar. Og et lands maskiner vil ikke behøve å forholde seg til datoinnskrivninger eller datofelter inneholdende lokalt ugyldige datoformater. Jeg ser i den andre tråden at du skal lage en multi-language versjon. Om du skal selge et program til US-oppsatte maskiner og der påstår at "1/2/2006" er i februar, da blir du neppe rikere enn Røkke. Du er nødt til å gjøre det på min måte dersom datoinnskrivning skal fungere i mange land med hvert lands logikk, det er hele ideen med pc'ens regionale innstillinger. Omvandle strengen til en datovariabel med DateValue, og så lagrer du datovariabelen i Accessbasen, det virker i alle land og du trenger ikke tenke mer på hvordan datoer skrives inn eller hvordan den lokale Access viser resultatene. Du har ekte, entydige, riktige datoer. Det du beskriver som problematisk oppstår først når du begynner å sende datoer som tekststrenger over landegrenser med forskjellige formater "for å konvertere dem i utlandet". Men den ideen er ikke helt god i utgangspunktet HTH. Beste hilsen Harald Endret 17. juni 2006 av Harald Staff Lenke til kommentar
[space] Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 Problemet er at jeg har hatt en del problemer med folk som får invalid date pga feil oppsett på maskinen. Dette er vel da typisk folk med piratkopiert windows, som ikke har giddet fikse på det under installasjonen. I engelskspråklige land vil man vel ikke oppleve dette problemet da engelsk jo er standardinstillingen. Lenke til kommentar
aadnk Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 Da er det vel egentlig helst de som burde fikse problematikken på sin datamaskin, og ikke du i ditt program. Koden jeg gav deg i den andre tråden fungerer, som jeg nevnte, kun for DDMMYY og DDMMYYYY (da kan du ikke skrive 122006 og tro at du får 1.02.2006), eller D[ikke-tall]M[ikke-tall]Y[ikke-tall], der [ikke-tall] representerer en streng med karakterer som ikke er et tall (eksempelvis punktum eller skråstrek). Når oppstår denne feilen for øvrig? Når de taster inn en dato, eller når de eksekverer programmet/modulen? Lenke til kommentar
Harald Staff Skrevet 17. juni 2006 Del Skrevet 17. juni 2006 I engelskspråklige land vil man vel ikke oppleve dette problemet da engelsk jo er standardinstillingen. 6325141[/snapback] Dette har du ikke skjønt, og jeg gir opp å hjelpe deg med følgende: Hvis programmet ditt får inndata "1/2/2006" så må programmet vite om det med det menes 2. januar eller 1. februar. Det er bare tre måter å avgjøre det, og du kan bare bruke en av dem: - bestemme at det alltid menes 2.januar; - bestemme at det alltid menes 1.februar; - sjekke om maskinen er satt opp med måned eller dag som første ledd i datoer. Det er ellers rørende av deg å legge så mye jobb i å bistå late tyver og pirater. Jeg hadde nok ikke vært så grei. Beste hilsen Harald Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå