Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
&& create test text file
lcString=[31-Mar-2006]
STRTOFILE(lcString, [test.txt])
&& create test table
CREATE TABLE datetest (date1 c(12))
APPEND FROM test.txt TYPE SDF
&& apply conversion
SCAN
REPLACE date1 WITH Date_Conv(date1)
ENDSCAN
&& set date field(s) to date
ALTER TABLE datetest ALTER COLUMN date1 d
LOCATE
BROWSE NOWAIT
RETURN
PROCEDURE Date_Conv
LPARAMETERS lcDate
nDay = VAL(GETWORDNUM(lcDate, 1, [-]))
uMonth = UPPER(GETWORDNUM(lcDate, 2, [-]))
nYear = VAL(GETWORDNUM(lcDate, 3, [-]))
DO CASE
CASE uMonth = [JAN]
uMonth = 1
CASE uMonth = [FEB]
uMonth = 2
CASE uMonth = [MAR]
uMonth = 3
CASE uMonth = [APR]
uMonth = 4
CASE uMonth = [MAY]
uMonth = 5
CASE uMonth = [JAU]
uMonth = 6
CASE uMonth = [JUL]
uMonth = 7
CASE uMonth = [AUG]
uMonth = 8
CASE uMonth = [SEP]
uMonth = 9
CASE uMonth = [OCT]
uMonth = 10
CASE uMonth = [NOV]
uMonth = 11
CASE uMonth = [DEC]
uMonth = 12
OTHERWISE
MESSAGEBOX([Problem])
ENDCASE
RETURN DTOC(DATE(nYear, uMonth, nDay))
ENDPROC
CLOSE ALL
CREATE TABLE test (date1 c(12),date2 c(12))
FOR xx = 1 TO 30000
INSERT INTO test VALUES ;
(TRANSFORM(MAX(1,ROUND(28*RAND(),0)))+"-"+;
UPPER(LEFT(CMONTH(CTOD(TRANSFORM(MAX(1,MOD(xx,12)))+"/1/1900")),3))+;
"-"+TRANSFORM(YEAR(DATE())-(ROUND(RAND()*5,0))),"")
ENDFOR
\
\without array
FOR x = 1 TO 5
yy = SECONDS()
REPLACE ALL date2 WITH DTOC(Date_Conv1(date1))
?SECONDS()-yy
ENDFOR
\
\with array
FOR x = 1 TO 5
yy = SECONDS()
LOCAL ARRAY aa[12,2]
Date_Conv_Array(@aa) &&only create array once
REPLACE ALL date2 WITH Date_Conv_With_Array(@aa, date1)
?SECONDS()-yy
ENDFOR
BROWSE NOWAIT
RETURN
PROCEDURE Date_Conv_Array
LPARAMETERS m.aa
LOCAL i
FOR m.i = 1 TO 12
m.aa[m.i,1]=UPPER(LEFT(CMONTH(CTOD(TRANSFORM(m.i)+"/1/1900")),3))
m.aa[m.i,2]=TRANSFORM(m.i)
ENDFOR
RETURN m.aa
ENDPROC
PROCEDURE Date_Conv_With_Array
LPARAMETERS m.aa, m.cDate
RETURN m.aa[1+ASCAN(m.aa,UPPER(GETWORDNUM(m.cDate, 2, "-")),1,12,1,2)]+"/"+;
GETWORDNUM(date1, 1, "-")+"/"+GETWORDNUM(m.cDate, 3, "-")
ENDPROC
PROCEDURE Date_Conv1
LPARAMETERS m.tcDate
LOCAL lnDay, lcMonth, lnYear, lnMonth
lnDay = VAL(GETWORDNUM(m.tcDate, 1, [-]))
lcMonth = UPPER(GETWORDNUM(m.tcDate, 2, [-]))
lnYear = VAL(GETWORDNUM(m.tcDate, 3, [-]))
lnMonth = INT(AT(m.lcMonth,"~JAN~FEB~MAR~APR~MAY~JUN~JUL~AUG~SEP~OCT~NOV~DEC~")/4)+1
RETURN DATE(m.lnYear, m.lnMonth, m.lnDay)
ENDPROC
PROCEDURE Date_Conv_With_Array
LPARAMETERS m.aa, m.cDate
RETURN m.aa[1+ASCAN(m.aa,UPPER(GETWORDNUM(m.cDate, 2, "-")),1,12,1,2+4)]+"/"+;
GETWORDNUM(m.cDate, 1, "-")+"/"+GETWORDNUM(m.cDate, 3, "-")
ENDPROC
CLOSE ALL
CREATE TABLE test (textdata c(20), date1 c(12),date2 c(12))
FOR xx = 1 TO 30000
INSERT INTO test VALUES ;
(REPLICATE(CHR(65+MOD(m.xx,65)),18),;
TRANSFORM(MAX(1,ROUND(28*RAND(),0)))+"-"+;
UPPER(LEFT(CMONTH(CTOD(TRANSFORM(MAX(1,MOD(xx,12)))+"/1/1900")),3))+;
"-"+TRANSFORM(YEAR(DATE())-(ROUND(RAND()*5,0))),"")
ENDFOR
COPY TO test.txt TYPE DELIMITED
FOR xx = 1 TO 5
yy=SECONDS()
CREATE CURSOR curResult (textdata c(20), date1 d,date2 c(12))
LOCAL ARRAY aa[12,2]
LOCAL cString, f1, f2, cDelim, nInPutFile, nOutFile
nInPutFile = FOPEN('test.txt')
nOutFile = FCREATE('test_out.txt')
Date_Conv_Array(@aa) &&only create array once
DO WHILE !FEOF(nInPutFile)
m.cString = CHRTRAN(FGETS(m.nInPutFile),CHR(34),"")
m.f1 = GETWORDNUM(m.cString,1,",")
m.f2 = DTOS(CTOD(Date_Conv_With_Array(@aa,GETWORDNUM(cString,2,","))))
m.f3 = GETWORDNUM(m.cString,3,",")
FPUTS(m.nOutFile,m.f1+","+m.f2+","+m.f3)
ENDDO
FCLOSE(m.nInPutFile)
FCLOSE(m.nOutFile)
?SECONDS()-yy
ENDFOR
SELECT curResult
APPEND FROM test_out.txt TYPE DELIMITED
GO TOP
BROWSE NOWAIT
GO TOP IN test
SELECT test
BROWSE NOWAIT
MODIFY FILE test.txt nowait
MODIFY FILE test_out.txt nowait
CLEAR
CLOSE ALL
CREATE TABLE test (date1 c(12),date2 c(12))
FOR xx = 1 TO 30000
INSERT INTO test VALUES ;
(TRANSFORM(MAX(1,ROUND(28*RAND(),0)))+"-"+;
UPPER(LEFT(CMONTH(CTOD(TRANSFORM(MAX(1,MOD(xx,12)))+"/1/1900")),3))+;
"-"+TRANSFORM(YEAR(DATE())-(ROUND(RAND()*5,0))),"")
ENDFOR
*\
*\with array
yy = SECONDS()
LOCAL ARRAY aa[12,2]
Date_Conv_Array(@aa) &&only create array once
FOR x = 1 TO 5
REPLACE ALL date2 WITH m.aa[1+ASCAN(m.aa,UPPER(GETWORDNUM(date1, 2, "-")),1,12,1,2)]+"/"+;
GETWORDNUM(date1, 1, "-")+"/"+GETWORDNUM(date1, 3, "-")
ENDFOR
?"Date_Conv_with_Array:",SECONDS()-yy
PROCEDURE Date_Conv_Array
LPARAMETERS m.aa
LOCAL i
FOR m.i = 1 TO 12
m.aa[m.i,1]=UPPER(LEFT(CMONTH(CTOD(TRANSFORM(m.i)+"/1/1900")),3))
m.aa[m.i,2]=TRANSFORM(m.i)
ENDFOR
RETURN m.aa
ENDPROC