|
| Fordanske ugedage fra news-feeds Fra : Erik Ginnerskov |
Dato : 23-02-06 23:13 |
|
Hej NG
For et par uger siden fik jeg - med hjælp fra Jens G.C. mit news-reader
script til at vise de publiceringsdatoer, som er noteret i diverse
xml-filer:
<item>
<title>Titel</title>
<description>
Beskrivelse.
</description>
<link> http://side.dk/
<pubDate>Sun, 19 Feb 2006 01:09:41 +0100</pubDate>
</item>
If strItemPubdate <> "" Then
response.write "<span><br />" & (arrItemPubdate(i)) & "</span>"
End If
Men for at xml-filen skal kunne validere, skal ugedage udskrives på engelsk.
Jeg vil derimod gerne på mine sider have datoerne vist på dansk, så jeg
forsøgte at putte en replace ind lige efter If-sætningen. Det resulterede
desværre bare i, at datoerne slet ikke blev udskrevet:
strItemPubdate = Trim(Replace(Request("strItemPubdate"), "Sun,",
"Søndag"))
Altså er syntaksen ikke korrekt, men hvordan så?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Erik Ginnerskov (24-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 24-02-06 12:17 |
|
Erik Ginnerskov wrote:
> strItemPubdate = Trim(Replace(Request("strItemPubdate"), "Sun,",
> "Søndag"))
Jeg har forsøgt med en anderledes formulering:
strItemPubdate = Replace(strItemPubdate, "Sun,", "Søndag")
Det vælter ganske vist ikke noget, det fungerer bare ikke - ingenting bliver
ændret. Den syntaks er altså heller ikke rigtig. ;-(
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
terje (24-02-2006)
| Kommentar Fra : terje |
Dato : 24-02-06 16:17 |
|
Erik Ginnerskov wrote:
> Erik Ginnerskov wrote:
>
>> strItemPubdate = Trim(Replace(Request("strItemPubdate"), "Sun,",
>> "Søndag"))
>
> Jeg har forsøgt med en anderledes formulering:
>
> strItemPubdate = Replace(strItemPubdate, "Sun,", "Søndag")
>
> Det vælter ganske vist ikke noget, det fungerer bare ikke - ingenting bliver
> ændret. Den syntaks er altså heller ikke rigtig. ;-(
Du er nok på villspor Erik. Du vil aldri få validert danske dato
formater. Eksempel på korrekt format er
Sat, 07 Sep 2002 00:00:01 GMT
Dokumentasjonen for dette formatet finner du her:
http://asg.web.cmu.edu/rfc/rfc822.html#sec-5
Den som koder en RSS reader må altså selv skrive kode for å konvertere
dette datostemplet til et lokalt format, som dansk. Så vidt jeg vet er
det vanskelig å gjøre dette med xmldom eller med xls stylesheet, men det
kan gjøres med asp kode, selv om det er litt avansert. For eksempel må
du ta i betrakting at en slik dato også kan inneholde en offset verdi,
f. eks. +0100 eller -0020, hvilket betyr 1 time etter GMT, og 20
minutter før GMT. Og hvis denne datoen er ved et månedskifte så kan 20
minutters forskjell ende med at januar blir til februar. Om du forstår?
En annen sak er at svært mange RSS aggregatorer (de fleste?) produserer
RSS feeds som ikke er korrekte. Du kan forvente å få alt mulig merkelig
av dato formater.
Her er dokumentasjonen for RSS 2.0:
http://blogs.law.harvard.edu/tech/rss
terje
| |
Erik Ginnerskov (24-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 24-02-06 22:56 |
| | |
terje (25-02-2006)
| Kommentar Fra : terje |
Dato : 25-02-06 10:18 |
|
Erik Ginnerskov wrote:
> Næ, jeg tror, det er dig, der er på vildspor.
Du har rett. Jeg tok det som en utfordring og laget et forslag til
hvordan dette kan gjøres. Koden ser du nedenunder. Vær oppmerksom på at
dette bare er en skisse, koden kan forbedres, og du vil få feilmeldinger
dersom datoen du sender til funksjonen ikke har korrekt format.
terje på sporet?
Response.Write ConvertValidRSS20TimeStamps("Sat, 25 Feb 2006 23:02:04
+0120")
Function ConvertValidRSS20TimeStamps(sTimeStamp)
Dim arrTmp, arrTime
Dim yyyy, mm, dd, h, m, s
Dim sOffset, iOffsetHours, iOffsetMinutes, tmpDate
'Split dato strengen på mellomrommene
arrTmp = Split(sTimeStamp, Chr(32))
' Fyll inn våre dato verdier
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertToMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
' Split time delen av arrTmp i en egen array
arrTime = Split(arrTmp(4), ":")
' Fyll inn våre time verdier
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
' Sjekk om timestamp inneholder en offset verdi fra GMT som vi må
korrigere for
sOffset = Mid(arrTmp(5), 1, 1)
iOffsetHours = CInt(Mid(arrTmp(5), 2, 2))
iOffsetMinutes = CInt(Mid(arrTmp(5), 4, 2))
If Not (sOffset = "+" Or sOffset = "-") Or (iOffsetHours = 0 And
iOffsetMinutes = 0) Then
' Formater dette som du ønsker
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s
Exit Function
End If
Select Case sOffset
Case "+"
If iOffsetHours > 0 Then
tmpDate = DateAdd("h", iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
End If
Case "-"
If iOffsetHours > 0 Then
tmpDate = DateAdd("h", -iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
End If
Case Else
End Select
ConvertValidRSS20TimeStamps = tmpDate
End Function
Function ConvertToMonthName(sMonth)
Select Case UCase(Mid(sMonth, 1, 3))
Case "JAN": ConvertToMonthName = 1
Case "FEB": ConvertToMonthName = 2
Case "MAR": ConvertToMonthName = 3
Case "APR": ConvertToMonthName = 4
Case "MAY": ConvertToMonthName = 5
Case "JUN": ConvertToMonthName = 6
Case "JUL": ConvertToMonthName = 7
Case "AUG": ConvertToMonthName = 8
Case "SEP": ConvertToMonthName = 9
Case "OCT": ConvertToMonthName = 10
Case "NOV": ConvertToMonthName = 11
Case "DEC": ConvertToMonthName = 12
Case Else: ConvertToMonthName = 0
End Select
End Function
| |
Erik Ginnerskov (25-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 25-02-06 23:04 |
| | |
Jens Gyldenkærne Cla~ (03-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 03-03-06 22:07 |
|
Erik Ginnerskov skrev:
> Nu begynder det virkelig at ligne det, jeg havde ønsket. Der
> mangler kun en enkelt lille detalje: Når rettelsen af
> klokkeslet passerer midnat, bliver timetal, dato, måned og
> årstal rettet, men ugedagen gør desværre ikke.
Det er logisk nok, eftersom variablen dag ikke ændres i offset-
afsnittet. For at få den rigtige værdi ud kan du bruge funktionen
weekday: < http://www.w3schools.com/vbscript/func_weekday.asp>.
Den returnerer nummeret på ugedagen (1-7), og brugt på den nye
datoværdi (tmpDate), får du det rigtige tal ud. Så skal du bare
konvertere fra et tal til en bogstavkode - det kan klares med en
funktion a la ConvertDayName (med Case 0, Case 1, ... i stedet for
Case "MON"). En kortere udgave kan benytte sig af et array:
Function DayNum2DayName(dayNum)
Dim days
days = Array("", "Mandag", "Tirsdag", "Onsdag", _
"Torsdag", "Fredag", "Lørdag", "Søndag")
DayNum2DayName = days(dayNum)
End Function
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (04-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 04-03-06 19:33 |
|
Jens Gyldenkærne Clausen wrote:
> Det er logisk nok, eftersom variablen dag ikke ændres i offset-
> afsnittet.
Det er jeg klar over. Jeg har bare undret mig over, at den detalje helt er
blevet overset, når nu alle andre værdier fint bliver konverteret efter
behov.
> For at få den rigtige værdi ud kan du bruge funktionen
> weekday: < http://www.w3schools.com/vbscript/func_weekday.asp>.
Det har jeg kigget på - og kan ikke rigtigt se, hvordan jeg kan bruge det.
> Den returnerer nummeret på ugedagen (1-7), og brugt på den nye
> datoværdi (tmpDate), får du det rigtige tal ud.
Jeg har forsøgt at lave en funktion, der kan udtrække ugedagens navn af
PubDate og konvertere det til en talværdi:
Function DayName2DayNum(arrTmp)
Dim sDay
Select Case Ucase(Left(sDay, 3))
Case "MON": ConvertDayName = 1
Case "TUE": ConvertDayName = 2
Case "WED": ConvertDayName = 3
Case "THU": ConvertDayName = 4
Case "FRI": ConvertDayName = 5
Case "SAT": ConvertDayName = 6
Case "SUN": ConvertDayName = 7
Case Else: ConvertDayName = ""
End Select
End Function
.... men det giver en fejlmelding:
a.. Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01F5)
Tildelingen er ugyldig: 'ConvertDayName'
/nyheder/datotid.inc, line 89
Der fra kan jeg ikke komme videre.
Jeg har lagt datotid.inc og feedreader.inc ud:
http://hjemmesideskolen.dk/usenet/datotid.inc.txt
http://hjemmesideskolen.dk/usenet/feedreader.inc.txt
http://hjemmesideskolen.dk/nyheder/hss2.asp
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (25-02-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 25-02-06 23:55 |
|
Erik Ginnerskov skrev:
> http://hjemmesideskolen.dk/usenet/datotid.inc.txt
>
> Det giver mig en fejlmelding:
>
> Fejltype:
> Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03EA)
> Der er en syntaksfejl
Jeg tror problemet skyldes fejlombrydning af linjer.
Her er dem jeg lige fandt ved et hurtigt gennemsyn:
1:
If Not (sOffset = "+" Or sOffset = "-") Or (iOffsetHours = 0 And
iOffsetMinutes = 0) Then
2:
tmpDate = DateAdd("h", iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" &
s)
3:
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
End If
(put tmpDate = ... på en linje for sig)
4:
tmpDate = DateAdd("h", -iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" &
s)
5:
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
End If
(put tmpDate = ... på en linje for sig)
Når man henter kode fra et usenetindlæg, er det ofte nødvendigt at
samle linjer. Du kan enten lave linjerne lange i din egen fil,
eller også bruge "_" til at binde flere linjer sammen til én:
Response.write ("Denne tekst står på " & _
"flere linjer - men den fungerer " & _
"alligevel i asp på grund af " & _
"""_""-tegnet" )
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (26-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 26-02-06 00:14 |
|
Jens Gyldenkærne Clausen wrote:
> Jeg tror problemet skyldes fejlombrydning af linjer.
> 1:
> If Not (sOffset = "+" Or sOffset = "-") Or (iOffsetHours = 0 And
> 2:
> tmpDate = DateAdd("h", iOffsetHours, dd & "-" &
> 3:
> If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
> (put tmpDate = ... på en linje for sig)
> 4:
> tmpDate = DateAdd("h", -iOffsetHours, dd & "-" &
> 5:
> If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
> (put tmpDate = ... på en linje for sig)
Det har jeg nu forsøgt, samme fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03EA)
Der er en syntaksfejl
datotid.inc, line 4
Function ConvertValidRSS20TimeStamps(sTimeStamp)
datotid.inc.txt opdateret.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Torben Brandt (26-02-2006)
| Kommentar Fra : Torben Brandt |
Dato : 26-02-06 02:49 |
|
Erik Ginnerskov wrote in dk.edb.internet.webdesign.serverside.asp:
> Det har jeg nu forsøgt, samme fejlmelding:
>
> Fejltype:
> Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03EA)
> Der er en syntaksfejl
> datotid.inc, line 4
> Function ConvertValidRSS20TimeStamps(sTimeStamp)
Det er fordi du inkluderer filen inden i en For-løkken.
Man kan ikke lave en funktionsdefinition inden i en For-løkken, for så
skulle den blive redefineret ved hvert gennemløb, men man kan ikke
redefinere funktioner i VBS...
Flyt derfor inklusionen (<!--#include...) udenfor For-løkken.
> datotid.inc.txt opdateret.
Der er noget bøvl med manglende 'End If' efter de to gange linien
tmpDate = DateAdd("n", iOffsetMinutes, tmpDate)
står i filen. Se selv efter hvor de skal være - gider ikke lige sætte
mig ind i hvad koden burde gøre... :)
mvh Torben
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
terje (26-02-2006)
| Kommentar Fra : terje |
Dato : 26-02-06 12:37 |
|
Der var en grov logisk feil i koden så jeg har laget en ny versjon.
Håper denne er litt bedre. Men fortsatt mangler kode som tester at dato
formatet som sendes til funksjonen faktisk er korrekt. Man bør minimum
teste for A) at der er mellomrom B) at der er et komma i arrTmp(0), at
lengden på arrTmp(0) er 4 og at de tre første tegn matcher en måned.
terje
Response.Write ConvertValidRSS20TimeStamps("Fri, 24 Feb 2006 23:02:04
+0100")
Function ConvertValidRSS20TimeStamps(sTimeStamp)
Dim arrTmp, arrTime
Dim yyyy, mm, dd, h, m, s
Dim sOffsetMode, iOffsetHours, iOffsetMinutes, tmpDate
'Split dato strengen på mellomrommene
arrTmp = Split(sTimeStamp, Chr(32))
' Fyll inn våre dato verdier
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
' Split time delen av arrTmp i en egen array
arrTime = Split(arrTmp(4), ":")
' Fyll inn våre time verdier
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
' Sjekk om timestamp inneholder en offset verdi fra GMT som vi må
korrigere for
sOffsetMode = Mid(arrTmp(5), 1, 1)
iOffsetHours = CInt(Mid(arrTmp(5), 2, 2))
iOffsetMinutes = CInt(Mid(arrTmp(5), 4, 2))
If Not (sOffsetMode = "+" Or sOffsetMode = "-") Or (iOffsetHours =
0 And iOffsetMinutes = 0) Then
' Formater dette som du ønsker
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s
Exit Function
End If
Select Case sOffsetMode
Case "+"
If iOffsetHours > 0 Then
tmpDate = DateAdd("h", iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
Else
If iOffsetMinutes > 0 Then
tmpDate = DateAdd("n", iOffsetMinutes, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
End If
End If
Case "-"
If iOffsetHours > 0 Then
tmpDate = DateAdd("h", -iOffsetHours, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
Else
If iOffsetMinutes > 0 Then
tmpDate = DateAdd("n", -iOffsetMinutes, dd & "-" &
Mid(arrTmp(2), 1, 3) & "-" & yyyy & Chr(32) & h & ":" & m & ":" & s)
End If
End If
Case Else
End Select
ConvertValidRSS20TimeStamps = tmpDate
End Function
Function ConvertMonthName(sMonth)
Select Case UCase(Mid(sMonth, 1, 3))
Case "JAN": ConvertMonthName = 1
Case "FEB": ConvertMonthName = 2
Case "MAR": ConvertMonthName = 3
Case "APR": ConvertMonthName = 4
Case "MAY": ConvertMonthName = 5
Case "JUN": ConvertMonthName = 6
Case "JUL": ConvertMonthName = 7
Case "AUG": ConvertMonthName = 8
Case "SEP": ConvertMonthName = 9
Case "OCT": ConvertMonthName = 10
Case "NOV": ConvertMonthName = 11
Case "DEC": ConvertMonthName = 12
Case Else: ConvertMonthName = 0
End Select
End Function
| |
Erik Ginnerskov (27-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 27-02-06 18:02 |
|
terje wrote:
> Der var en grov logisk feil i koden så jeg har laget en ny versjon.
> Håper denne er litt bedre.
Jeg prøvede at lægge din nye kode ind i datotid.inc. Det ændrede ikke noget,
samme fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03EA)
Der er en syntaksfejl
/nyheder/datotid.inc, line 3
Function ConvertValidRSS20TimeStamps(sTimeStamp)
feedreader.inc.txt og datotid.inc.txt er opdateret.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Erik Ginnerskov (27-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 27-02-06 18:00 |
|
Torben Brandt wrote:
>> Fejltype:
>> Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03EA)
>> Der er en syntaksfejl
>> datotid.inc, line 4
>> Function ConvertValidRSS20TimeStamps(sTimeStamp)
>
> Det er fordi du inkluderer filen inden i en For-løkken.
Det lavede jeg så om på: Flyttede response.write-sætningen ned hvor den skal
bruges i feedreader.inc og lagde includeringen af datotid.inc op før
for-løkken.
Jeg får stadig præcis den samme fejlmelding, bortset fra, at den fejlgivende
linje har fået et andet nummer efter fjernelsen af response.write-linjen.
feedreader.inc.txt og datotid.inc.txt er opdateret.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
terje (27-02-2006)
| Kommentar Fra : terje |
Dato : 27-02-06 18:59 |
|
Erik Ginnerskov wrote:
> Jeg får stadig præcis den samme fejlmelding, bortset fra, at den fejlgivende
> linje har fået et andet nummer efter fjernelsen af response.write-linjen.
Har du forsøkt uten inkluderingsfiler?
Her er versjon 0.3. Den siste?
Function ConvertValidRSS20TimeStamps(sTimeStamp)
Dim arrTmp, arrTime
Dim yyyy, mm, dd, h, m, s
Dim sOffsetMode, iOffsetHours, iOffsetMinutes, tmpDate
arrTmp = Split(sTimeStamp, Chr(32))
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
arrTime = Split(arrTmp(4), ":")
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
tmpDate = dd & "-" & arrTmp(2) & "-" & yyyy & Chr(32) & h & ":" & m
& ":" & s
If UBound(arrTmp) < 5 Then ConvertValidRSS20TimeStamps = tmpDate:
Exit Function
sOffsetMode = Mid(arrTmp(5), 1, 1)
iOffsetHours = CInt(Mid(arrTmp(5), 2, 2))
iOffsetMinutes = CInt(Mid(arrTmp(5), 4, 2))
If Not (sOffsetMode = "+" Or sOffsetMode = "-") Then
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s: Exit
Function
End If
Select Case sOffsetMode
Case "+"
If iOffsetHours > 0 Then tmpDate = DateAdd("h",
iOffsetHours, tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
Case "-"
If iOffsetHours > 0 Then tmpDate = DateAdd("h",
-iOffsetHours, tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
Case Else
End Select
ConvertValidRSS20TimeStamps = tmpDate
End Function
Function ConvertMonthName(sMonth)
Select Case UCase(Mid(sMonth, 1, 3))
Case "JAN": ConvertMonthName = 1
Case "FEB": ConvertMonthName = 2
Case "MAR": ConvertMonthName = 3
Case "APR": ConvertMonthName = 4
Case "MAY": ConvertMonthName = 5
Case "JUN": ConvertMonthName = 6
Case "JUL": ConvertMonthName = 7
Case "AUG": ConvertMonthName = 8
Case "SEP": ConvertMonthName = 9
Case "OCT": ConvertMonthName = 10
Case "NOV": ConvertMonthName = 11
Case "DEC": ConvertMonthName = 12
Case Else: ConvertMonthName = 0
End Select
End Function
| |
Erik Ginnerskov (28-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 28-02-06 02:23 |
|
terje wrote:
> Har du forsøkt uten inkluderingsfiler?
Nej, men nu har jeg inkluderet datotid.inc straks efter "option explicit"
øverst i feedreader.inc. Derved slap jeg af med den fejlmelding, jeg hidtil
er blevet stoppet på.
http://hjemmesideskolen.dk/usenet/feedreader.inc.txt er opdateret.
Det gav mig så mulighed for at afprøve de tre scripts, du nu har forsøgt at
hjælpe mig med plus det, som Jens har tilrettet.
Dit script fra 25/2 10:17:
http://hjemmesideskolen.dk/usenet/datotid1.inc.txt fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0400)
En sætning var ventet
/nyheder/datotid1.inc, line 44
Case "-"
Dit script fra 26/2 12:36:
http://hjemmesideskolen.dk/usenet/datotid2.inc.txt fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0400)
En sætning var ventet
/nyheder/datotid2.inc, line 51
Case "-"
Dit script fra 27/2 18:58:
http://hjemmesideskolen.dk/usenet/datotid3.inc.txt fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03F7)
'Function' var ventet
/nyheder/datotid3.inc, line 28, column 62
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s: Exit
Jens' script giver ikke fejlmelding, men det udskriver indholdet af
parentesen i feedreader.inc linje 144 (uden ugedag) i stedet for at hente og
udskrive indholdet af pubdate i den aftastede xml-fil:
Response.Write "<span style='color: #9a9aff; background-color: inherit;'><br
/>" & ConvertValidRSS20TimeStamps("Sat, 25 Feb 2006 23:02:04 +0100") &
"</span>" udlæser:
26-02-2006 00:02:04
.... ved samtlige items. Der bliver med andre ord lagt en time til den
noterede engelske tid og da man derved passerer et døgnskifte, bliver der
lagt 1 til datoen.
Jeg har prøvet at slette
Trækker jeg på forhånd to timer fra i parentesen, sker der ikke noget
datoskifte.
At klokkeslet og dato bliver rettet, er bare super. Så mangler jeg bare at
få udlæst indholdet af PubDate - med ugedagene på dansk også.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Erik Ginnerskov (28-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 28-02-06 02:42 |
|
Erik Ginnerskov wrote:
> Jeg har prøvet at slette
Ups, den glemte jeg da at afslutte.
Det jeg havde prøvet at slette, var indholdet i parentesen for i stedet at
hente indholdet af PubDate i xml-filen. Det må jeg ikke, det giver fejl.
Sletter jeg alt mellem anførselstegn:
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009)
Indekset er uden for området: '[number: 3]'
/nyheder/datotid4.inc, line 12
Tømmer jeg parentesen helt:
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01C2)
Antallet af argumenter er forkert eller egenskabstildelingen er ugyldig:
'ConvertValidRSS20TimeStamps'
/nyheder/feedreader2.inc, line 144
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
terje (28-02-2006)
| Kommentar Fra : terje |
Dato : 28-02-06 10:17 |
|
Erik Ginnerskov wrote:
> Fejltype:
> Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03F7)
> 'Function' var ventet
> /nyheder/datotid3.inc, line 28, column 62
> ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s: Exit
Som Jens sa, man må være obs på _linebreaks_ når man kopierer kode fra
sin nyhetsleser og deretter limer den inn i sin asp editor. Linjen over
skal avsluttes med *Exit Function*: Du må altså flytte *Function* opp en
linje. Det samme er tilfelle også et annet sted i koden.
terje
| |
terje (28-02-2006)
| Kommentar Fra : terje |
Dato : 28-02-06 12:43 |
|
He, he. Dette tar visst aldri slutt ...
Jeg har funnet en ny logisk feil i koden. Siden Danmark (og Norge)
ligger i tidssonen +0100, altså en time før GMT (UTC), så skal man
selvfølgelig kun korrigere for tidssone når denne verdien er
*forskjelig* fra +0100. Å korrigere for offset +0100 er riktig kun
dersom man befinner seg *utenfor* vår tidssone. Man må derfor sjekke om
offset verdien som kommer inn i funksjonen er forskjellig fra
Danmark/Norge, noe som gjør koden mer komplisert.
Her er versjon 0.4:
terje :-}
Function ConvertValidRSS20TimeStamps(sTimeStamp)
Dim arrTmp, arrTime
Dim yyyy, mm, dd, h, m, s
Dim sOffsetMode, iOffsetHours, iOffsetMinutes, tmpDate
arrTmp = Split(sTimeStamp, Chr(32))
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
arrTime = Split(arrTmp(4), ":")
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
tmpDate = dd & "-" & arrTmp(2) & "-" & yyyy & Chr(32) & h & ":" & m
& ":" & s
If UBound(arrTmp) < 5 Then ConvertValidRSS20TimeStamps = tmpDate:
Exit Function
sOffsetMode = Mid(arrTmp(5), 1, 1)
iOffsetHours = CInt(Mid(arrTmp(5), 2, 2))
iOffsetMinutes = CInt(Mid(arrTmp(5), 4, 2))
If Not (sOffsetMode = "+" Or sOffsetMode = "-") Then
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s: Exit
Function
End If
Select Case sOffsetMode
Case "+"
'// Hvis f. eks. +0200 (Hvis +0100 gjør vi ingenting)
If iOffsetHours > 1 Then
tmpDate = DateAdd("h", iOffsetHours, tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
End If
'// Hvis f. eks. +0120: vi korrigerer kun for minuttene
If iOffsetHours = 1 Then
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
End If
'// Hvis f. eks. +0020: vi korrigerer kun for minuttene
(merk minus)
If iOffsetHours = 0 Then
If iOffsetMinutes > 0 Then
tmpDate = DateAdd("n", -iOffsetMinutes, tmpDate)
Else
tmpDate = DateAdd("h", -1, tmpDate)
End If
End If
Case "-"
'// Hvis f. eks. -0120
If iOffsetHours > 0 Then
tmpDate = DateAdd("h", -(iOffsetHours + 1), tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
End If
'// Hvis f. eks. -0020
If iOffsetHours = 0 Then
tmpDate = DateAdd("h", -1, tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
End If
Case Else
End Select
ConvertValidRSS20TimeStamps = tmpDate
End Function
| |
Erik Ginnerskov (01-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 01-03-06 01:17 |
|
terje wrote:
> Jeg har funnet en ny logisk feil i koden. Siden Danmark (og Norge)
> ligger i tidssonen +0100, altså en time før GMT (UTC), så skal man
> selvfølgelig kun korrigere for tidssone når denne verdien er
> *forskjelig* fra +0100. Å korrigere for offset +0100 er riktig kun
> dersom man befinner seg *utenfor* vår tidssone. Man må derfor sjekke
> om offset verdien som kommer inn i funksjonen er forskjellig fra
> Danmark/Norge, noe som gjør koden mer komplisert.
Det er jeg ikke sikker på, du har ret i. De tider, som vises i xml-filernes
PubDate må antages at være GMT-tid + 1 time. Eks. 21:27:45 +0100 vil sige
22:27:45 dansk/norsk tid (korrekt betegnelse er mellemeuropæisk normaltid).
De ændringer, Jens havde lavet i dit script, fik da også effektueret en
korrekt konvertering af tiden (desværrebare den, som er noteret i parentesen
i Response.Write-sætningen i feedreader.inc i stedet for de tider, som er
noteret i PubDate ved hvert item i xml-filerne).
Jeg har forsøgt at få fikset det ved en omskrivning af indholdet i
parentesen:
Response.Write "<span style='color: #9a9aff; background-color: inherit;'><br
/>" & ConvertValidRSS20TimeStamps("Sat, 25 Feb 2006 21:02:04 +0100") &
"</span>"
Nyt indhold:
"Sat," & arrTmp(1) & "." & arrTmp(2) & arrTmp(3) & arrTime(0) & ":" &
arrTime(1) & ":" & arrTime(2) & "+0100"
.... altså at indsætte de definerede varabler, men får så en fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009)
Indekset er uden for området: 'arrTmp'
/nyheder/feedreader2.inc, line 144
> Her er versjon 0.4:
Den gemmer jeg lige til en anden gang.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Erik Ginnerskov (01-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 01-03-06 00:48 |
|
terje wrote:
> Du må altså flytte *Function* opp en linje.
Den havde jeg lige overset.
> Det samme er tilfelle også et annet sted i
> koden.
Det må være linje 20, du mener. Jeg har rettet dem begge. Nu får jeg denne
fejlmeddelelse (meget lig den, jeg får ved de to første versioner af
scriptet):
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0400)
En sætning var ventet
/nyheder/datotid3.inc, line 39
Case "-"
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (05-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 05-03-06 00:44 |
|
Erik Ginnerskov skrev:
>> < http://www.w3schools.com/vbscript/func_weekday.asp>.
>
> Det har jeg kigget på - og kan ikke rigtigt se, hvordan jeg
> kan bruge det.
Du har brug for en funktion der når den modtager en dato kan
udskrive navnet på ugedagen på dansk. Weekday er en indbygget
vbscript-funktion der giver nummeret på ugedagen - herfra er det
simpelt at lave en funktion der ændrer nummeret til et navn.
> Jeg har forsøgt at lave en funktion, der kan udtrække
> ugedagens navn af PubDate og konvertere det til en talværdi:
Du starter det forkerte sted. Der hvor du har brug for funktionen,
kan du ikke længere bruge pubDate som udgangspunkt - selv om der
står "Mon" i pubdate, kan det jo tænkes at offset-værdien gør at
det svarer til en dansk tirsdag.
Du skal - som jeg skrev i sidste indlæg - bruge tmpDate som
udgangspunkt. tmpDate er en datovariabel (fx 4.3.2006, gemt i et
eller andet internt asp-format). For at finde ugedagen kan du nu
benytte weekday-funktionen som nævnt tidligere. Weekday returnerer
et tal mellem 1 og 7 - som du herefter kan fortolke (og udskrive)
som man, tir, ...
Du får en køreklar funktion om lidt, men lige et par kommentarer
til dit eget forsøg først.
> Function DayName2DayNum(arrTmp)
Det er ikke forkert, men uheldigt at anvende "arrTmp" som
parameternavn til funktionen. En funktionsparameter er lokal for
funktionen, så det "arrTmp" du angiver på linjen herover er altså
en anden arrTmp end den variabel der lever mange andre steder i
koden. Ydermere er det funktionen skal arbejde med ikke et array
men en eller anden datodel (sådan som du har angivet
funktionsnavnet ser det ud til at du vil arbejde med et DayName -
det var egentlig ikke det jeg havde lagt op til, men skidt nu med
det).
> Dim sDay
Her erklærer du igen en lokal variabel for funktionen. Den vil
skygge for den sDay der findes udenfor - så når du i den
efterfølgende linje:
> Select Case Ucase(Left(sDay, 3))
- undersøger sDay, vil variablen altid være tom.
> Case "MON": ConvertDayName = 1
> Case "TUE": ConvertDayName = 2
[snip]
Her kommer årsagen til din asp-fejl. Din funktion hedder
DayName2DayNum, men du prøver at returnere en værdi via navnet
ConvertDayName. Det er en nem fejl at lave hvis man kopierer en
eksisterende funktion for at lave en ny - men den er omvendt også
let at rette når man først har set den et par gange.
Gylden regel: De linjer man bruger til at returnere en værdi fra en
funktion skal indeholde navnet på den funktion man er i - her altså
DayName2DayNum = 1 (etc.)
> Der fra kan jeg ikke komme videre.
O.k. - her er en fungerende konverteringsfunktion:
Function Date2Dayname(dateVar)
' Input: Gyldig asp-dato
' Output: ugedag på dansk (mandag, tirsdag, ...)
Dim days
'Array med vores ugedage
days = Array("", "Mandag", "Tirsdag", "Onsdag", _
"Torsdag", "Fredag", "Lørdag", "Søndag")
' Brug weekday-funktionen til at finde nummeret på
' ugedagen (med mandag = 1), og returner ugedagen
' via arrayet
Date2Dayname = days(weekday(dateVar, 2))
End Function
Den kaldes som følger (linje 70):
ConvertValidRSS20TimeStamps = Date2Dayname(tmpDate) & ...
Ny udgave: < http://gyros.dk/usenet/asp/datotid.inc.txt>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (07-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 07-03-06 22:41 |
|
Jens Gyldenkærne Clausen wrote:
[snip en lang og belærende forklaring, som jeg skal hve kigget nærmere på]
> Ny udgave: < http://gyros.dk/usenet/asp/datotid.inc.txt>
Det fungerer helt perfekt nu - på de fleste af de feeds, jeg hidtil har haft
link til.
De to sidste må indtil videre bare være ukonverterede.
Den ene har jeg ikke kunnet lokalisere årsagen til fejlfunktionen - et eller
andet i xml-filen får systemet til at fejle.
Den anden leverer PubDate i CET-tid, hvilket scriptet heller ikke kan li'.
Her vil jeg kigge på at lave en barberet konvertering, der bare fordansker
ugedage og måneder (CET er den tidszone, vi i DK benytter, så her skal der
ikke lægges noget til.).
Jeg takker Jens for hans tålmodighed.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (27-02-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 27-02-06 21:07 |
|
Erik Ginnerskov skrev:
> Jeg prøvede at lægge din nye kode ind i datotid.inc. Det
> ændrede ikke noget, samme fejlmelding:
Jeg prøvede bare at køre datotid.inc (lavede den som asp-fil) - og
fandt hurtigt to fejl ud fra asp-fejlene.
Problemet ligger i afsnittet der starter påo linje 34:
Select Case sOffsetMode
I hver af de to case-sætninger (Case "+", Case "-") indledes 3 If-
sætninger, men der afsluttes kun med 2 x End If.
Afslutter man hvert Case-afsnit med 3 x End If er der ingen fejl i
datotid.inc. Jeg har ikke afprøvet det samlede script, men tjek
selv om det virker.
Jeg har lagt en rettet udgave af filen op her:
< http://gyros.dk/usenet/temp/datotid.inc.txt>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Jens Gyldenkærne Cla~ (01-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 01-03-06 11:52 |
|
Erik Ginnerskov skrev:
>> Man må derfor sjekke om offset verdien som kommer inn i
>> funksjonen er forskjellig fra Danmark/Norge, noe som gjør
>> koden mer komplisert.
> Det er jeg ikke sikker på, du har ret i. De tider, som vises i
> xml-filernes PubDate må antages at være GMT-tid + 1 time.
Hvorfor det? Dine xml-filer kommer vel "udefra" - så du kan ikke
antage ret meget om dem. Hvis de kommer fra en dansk udbyder, er
det måske nok sandsynligt at datoer er angivet med dansk tidszone,
men selv her kan man ikke være sikker på GMT +1 - i sommerhalvåret
er det jo GMT +2.
> Nyt indhold:
>
> "Sat," & arrTmp(1) & "." & arrTmp(2) & arrTmp(3) & arrTime(0)
> & ":" & arrTime(1) & ":" & arrTime(2) & "+0100"
>
> ... altså at indsætte de definerede varabler, men får så en
> fejlmelding:
Et gæt - arrTmp(1)-(3) skal være arrTmp(0-2).
Arrays indekseres normalt fra 0.
I øvrigt skal du vel også erstatte "Sat," med en variabel der viser
ugedagen i ovenstående.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (01-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 01-03-06 18:54 |
|
Jens Gyldenkærne Clausen wrote:
>> Det er jeg ikke sikker på, du har ret i. De tider, som vises i
>> xml-filernes PubDate må antages at være GMT-tid + 1 time.
>
> Hvorfor det? Dine xml-filer kommer vel "udefra" - så du kan ikke
> antage ret meget om dem.
Ingenting er skudsikkert, det har du ret i. Men min antagelse kan være lige
så igtig som Terjes. Og da den del af scriptet nu fungerer til min fulde
tifredshed, ser jeg ingen grund til at ændre mere ved det.
Jeg prøvede i går at indsætte i parentesen i Response.Write-sætningen et
tidspunkt mindre end en time før et årsskifte. Det resulterede i, at både
timetal, dato, måned og årstal blev plusset med 1.
>> Nyt indhold:
>>
>> "Sat," & arrTmp(1) & "." & arrTmp(2) & arrTmp(3) & arrTime(0)
>> & ":" & arrTime(1) & ":" & arrTime(2) & "+0100"
>>
>> ... altså at indsætte de definerede varabler, men får så en
>> fejlmelding:
>
> Et gæt - arrTmp(1)-(3) skal være arrTmp(0-2).
> Arrays indekseres normalt fra 0.
Jeg har indsat de variabler, som er defineret øverst i datotid4.inc -
http://hjemmesideskolen.dk/usenet/datotid4.inc.txt.
> I øvrigt skal du vel også erstatte "Sat," med en variabel der viser
> ugedagen i ovenstående.
Jo, det er da meningen. Men indtil videre bliver ugedagen slet ikke
udskrevet. Jeg prøver at omdefinere de variabler og ser, om det bringer mig
et skridt videre.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Erik Ginnerskov (01-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 01-03-06 23:25 |
|
Jens Gyldenkærne Clausen wrote:
>> Nyt indhold:
>>
>> "Sat," & arrTmp(1) & "." & arrTmp(2) & arrTmp(3) & arrTime(0)
>> & ":" & arrTime(1) & ":" & arrTime(2) & "+0100"
> Et gæt - arrTmp(1)-(3) skal være arrTmp(0-2).
> Arrays indekseres normalt fra 0.
>
> I øvrigt skal du vel også erstatte "Sat," med en variabel der viser
> ugedagen i ovenstående.
Jeg har nu prøvet at definere en variabel for ugadag og en funktion til
konvertering af ugedag, samt at indsætte variablen i udkriftsætningen:
Response.Write "<span style='color: #9a9aff; background-color: inherit;'><br
/>" & ConvertValidRSS20TimeStamps(arrTmp(0) & arrTmp(1) & "." & arrTmp(2) &
arrTmp(3) & arrTime(0) & ":" & arrTime(1) & ":" & arrTime(2) & "+0100") &
"</span>"
Det rettede i datotid4.inc og feedreader.inc:
http://hjemmesideskolen.dk/usenet/datotid4.inc.txt
http://hjemmesideskolen.dk/usenet/feedreader.inc.txt
Det resulterer i den samme fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009)
Indekset er uden for området: 'arrTmp'
/nyheder/feedreader.inc, line 144
Hvis jeg genindsætter tekststrengen i parentesen, er jeg tilbage, hvor jeg
var før, parentesens indhold af klokkeslet, dato og måned bliver behandlet
og udskrevet, ugedagen bliver slet ikke rørt:
Response.Write "<span style='color: #9a9aff; background-color: inherit;'><br
/>" & ConvertValidRSS20TimeStamps("Sat, 25 Feb 2006 21:02:04 +0100") &
"</span>"
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (01-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 01-03-06 23:54 |
|
Erik Ginnerskov skrev:
> Fejltype:
> Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009)
> Indekset er uden for området: 'arrTmp'
> /nyheder/feedreader.inc, line 144
Tjek hvad du har i arrTmp - noget tyder på at du har færre elementer end
du tror.
Prøv at indsætte noget a la:
For i = 0 to Ubound(arrTmp)
Response.write "arrTmp(" & i & "): " & arrTmp(i) & "<br>"
Next
- efter at du har lavet arrTmp.
> Hvis jeg genindsætter tekststrengen i parentesen, er jeg tilbage, hvor
> jeg var før, parentesens indhold af klokkeslet, dato og måned bliver
> behandlet og udskrevet, ugedagen bliver slet ikke rørt:
Hvad er det egentlig du kalder funktionen med pt? Jeg kan ikke lige finde
kaldet i din kode.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (02-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 02-03-06 00:54 |
|
Jens Gyldenkærne Clausen wrote:
> Tjek hvad du har i arrTmp - noget tyder på at du har færre elementer
> end du tror.
Jeg har da ellers prøvet at "holde ørerne stive" og tjekke antallet af
elementer og antallet af Temp().
> Prøv at indsætte noget a la:
>
> For i = 0 to Ubound(arrTmp)
> Response.write "arrTmp(" & i & "): " & arrTmp(i) & "<br>"
> Next
>
> - efter at du har lavet arrTmp.
Så får jeg denne udskrift ved hvert item:
arrTmp(0): Sat,
arrTmp(1): 25
arrTmp(2): Feb
arrTmp(3): 2006
arrTmp(4): 21:02:04
arrTmp(5): +0100
> Hvad er det egentlig du kalder funktionen med pt? Jeg kan ikke lige
> finde kaldet i din kode.
Undskyld, der tabte du mig vist. Hvad har du ledt efter og hvor?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (02-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 02-03-06 10:54 |
|
Erik Ginnerskov skrev:
> Så får jeg denne udskrift ved hvert item:
>
> arrTmp(0): Sat,
> arrTmp(1): 25
> arrTmp(2): Feb
> arrTmp(3): 2006
> arrTmp(4): 21:02:04
> arrTmp(5): +0100
Hm - det ser jo fint nok ud. Men er det med samme inddata som giver
aspfejl længere nede?
>> Hvad er det egentlig du kalder funktionen med pt? Jeg kan
>> ikke lige finde kaldet i din kode.
>
> Undskyld, der tabte du mig vist. Hvad har du ledt efter og
> hvor?
Jeg har ledt efter hvordan du så kalder funktionen
ConvertValidRSS20TimeStamps - og nu har jeg også fundet det.
Du skriver på linje 143 i feedreader-filen:
.... ConvertValidRSS20TimeStamps(arrTmp(0) & arrTmp(1) & "." &
arrTmp(2) & arrTmp(3) & arrTime(0) ...
- og det er her det går galt. arrTmp/arrTime er lokale variable
inde i din funktion - de har ikke noget at gøre i kaldet til
funktionen. Du har godt nok defineret arrTmp/arrTime højere oppe
(for at undgå option explicit-fejl), men de er tomme når du når til
linje 143.
Funktionen ConvertValidRSS20TimeStamps tager ét argument - nemlig
en rss-formateret dato. Den har du til rådighed i arrayet
arrItemPubdate.
Ret kaldet til ConvertValidRSS20TimeStamps så der bare står:
ConvertValidRSS20TimeStamps(arrItemPubdate(i))
- så ser det ud til at virke. Jeg testede lige med et feed fra
html.dk: < http://gyros.dk/usenet/asp/rss2.asp>
En lille ekstra note - på linje 149 udskriver du et array uden
indeks: response.write arrItemImage. Det er formentlig ikke
tilsigtet, brug response.write arrItemImage(i) i stedet for (man
ser ikke problemet så let, da det kun optræder hvis description
mangler.
Generelt kan der også let gå ged i udskrivningen når den er lavet
som nu. Problemet er at der ikke er nogen sikkerhed for at der er
det samme antal xml-elementer i hvert item. Hvis man fx har et feed
med 3 elementer hvor der er en pubdate på nr. 1 og 3, men ikke på
nr. 2, vil item 2 blive udskrevet med datoen for item 3, mens item
3 slet ikke vil blive udskrevet (man får en "array out of bound"-
fejl). Det kan også give problemer hvis et site anvender både
pubdate og dc:date.
Men hvis feedet er bygget op over en fast skabelon, kan man nok
godt undgå ovenstående problemer.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (02-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 02-03-06 18:11 |
|
Jens Gyldenkærne Clausen wrote:
> Funktionen ConvertValidRSS20TimeStamps tager ét argument - nemlig
> en rss-formateret dato. Den har du til rådighed i arrayet
> arrItemPubdate.
>
> Ret kaldet til ConvertValidRSS20TimeStamps så der bare står:
>
> ConvertValidRSS20TimeStamps(arrItemPubdate(i))
>
> - så ser det ud til at virke.
Ja, så kan den hente, konvertere og udskrive dato, måned, år og klokkeslet
fra PubDate i xml-filerne.
Men jeg har stadig ikke fået den til at konvertere ugedages navne - i
øjeblikket bliver de slet ikke udskrevet. Jeg har forsøge at definere noget
i datotid4.inc
Linje 15 tilgøjet:
dag = Right("0" & CStr(ConvertDayName(arrTmp(0))), 2)
Linje 34 - tilføjelse sidst i linjen:
ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s & dag
Fra linje 78 - nu funktion defineret:
Function ConvertDayName(sDay)
Select Case UCase(Mid(sDay, 1, 3))
Case "Mon": ConvertDayName = "Mandag"
Case "Tue": ConvertDayName = "Tirsdag"
Case "Wed": ConvertDayName = "Onsdag"
Case "Thu": ConvertDayName = "Torsdag"
Case "Fri": ConvertDayName = "Fredag"
Case "Sat": ConvertDayName = "Lørdag"
Case "Sun": ConvertDayName = "Søndag"
Case Else: ConvertDayName = 0
End Select
End Function
Men der sker ikke noget. Ingen hentning, konvertering eller udskrift af
ugedag - og ingen fejlmelding.
Jeg har også prøvet med tallene 1-7 (uden anførselstegn) i stedet for danske
dagnavne. Samme manglende resultat.
> brug response.write arrItemImage(i) i stedet for (man
> ser ikke problemet så let, da det kun optræder hvis description
> mangler.
Er rettet
> Generelt kan der også let gå ged i udskrivningen når den er lavet
> som nu. Problemet er at der ikke er nogen sikkerhed for at der er
> det samme antal xml-elementer i hvert item.
Det har jeg været ude for. Jeg har måttet bede en om at få tilføjet PubDate
på alle items (manglede på de første 10-12 stykker), da hans xml fik mit
asp-script til at fejle.
> Men hvis feedet er bygget op over en fast skabelon, kan man nok
> godt undgå ovenstående problemer.
Opstår der problemer af den slags hen ad vejen, må vi tage den der fra.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (02-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 02-03-06 22:25 |
|
Erik Ginnerskov skrev:
> Linje 15 tilgøjet:
> dag = Right("0" & CStr(ConvertDayName(arrTmp(0))), 2)
Logisk fejl. Du skal ikke sætte 0 foran en ugedag (0Mandag?) og du
skal ikke nøjes med de to sidste tegn i værdien
(Right("0Mandag", 2) = "ag")
arrTmp(0) er vist god nok (det skal være der du har "Sat" i den
oprindelige streng).
Ret til:
dag = ConvertDayName(arrTmp(0))
> Linje 34 - tilføjelse sidst i linjen:
> ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s & dag
Er du sikker på at dag bare skal tilføjes direkte i enden på
datoangivelsen? Til en test er det selvfølgelig o.k., men jeg ville
tro at man skulle bruge noget a la:
dag & " den " & dd & ". " & mm & " " & yyyy
(men jeg har ikke tjekket hvad linje 34 laver)
> Fra linje 78 - nu funktion defineret:
> Function ConvertDayName(sDay)
> Select Case UCase(Mid(sDay, 1, 3))
UCase betyder konverter til versaler. Mid(sDay, 1, 3) vil derfor
give værdier som "MON", "TUE", "WED" etc.
> Case "Mon": ConvertDayName = "Mandag"
- og da sammenligninger er versalfølsomme, rammer man ikke nogen af
de case-sætninger der er i funktionen.
Ret til MON, TUE etc. - eller evt. mon, tue, wed, og ret Ucase til
Lcase.
NB: Mid(varnavn, 1, X) svarer til Left(varnavn, X), så man kan også
bare skrive:
Select Case Ucase(Left(sDay, 3))
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (03-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 03-03-06 01:11 |
|
Jens Gyldenkærne Clausen wrote:
> Logisk fejl. Du skal ikke sætte 0 foran en ugedag (0Mandag?) og du
> skal ikke nøjes med de to sidste tegn i værdien
> (Right("0Mandag", 2) = "ag")
>
> arrTmp(0) er vist god nok (det skal være der du har "Sat" i den
> oprindelige streng).
>
> Ret til:
>
> dag = ConvertDayName(arrTmp(0))
Gjort.
>> Linje 34 - tilføjelse sidst i linjen:
>> ConvertValidRSS20TimeStamps = yyyy & mm & dd & h & m & s & dag
>
> Er du sikker på at dag bare skal tilføjes direkte i enden på
> datoangivelsen? Til en test er det selvfølgelig o.k., men jeg ville
> tro at man skulle bruge noget a la:
>
> dag & " den " & dd & ". " & mm & " " & yyyy
Rettet til:
ConvertValidRSS20TimeStamps = dag & "den" & dd & ". " & mm & yyyy & h & ":"
& m & ":" & s
> UCase betyder konverter til versaler. Mid(sDay, 1, 3) vil derfor
> give værdier som "MON", "TUE", "WED" etc.
>
>> Case "Mon": ConvertDayName = "Mandag"
>
> - og da sammenligninger er versalfølsomme, rammer man ikke nogen af
> de case-sætninger der er i funktionen.
>
> Ret til MON, TUE etc. - eller evt. mon, tue, wed, og ret Ucase til
> Lcase.
I princippet ulogisk, da indholdet i de xml-filer jeg hditil har kigget på
består af uppercase første bogstav og lowercase for de to næste.
Jeg har da også prøvet både at rette til uppercase i case-sætningerne og
rette til lovercase og rette første linje til LCase. Ingen af delene
resulterede i udskrift af ugedage, hverken konverterede eller ukonverterede.
> NB: Mid(varnavn, 1, X) svarer til Left(varnavn, X), så man kan også
> bare skrive:
>
> Select Case Ucase(Left(sDay, 3))
Begge dele prøvet, intet output.
Det rettede i datotid4.inc og feedreader.inc:
http://hjemmesideskolen.dk/usenet/datotid4.inc.txt
http://hjemmesideskolen.dk/usenet/feedreader.inc.txt
Sammenlign:
http://hjemmesideskolen.dk/nyheder/hss.asp - ukonverteret
http://hjemmesideskolen.dk/nyheder/hss2.asp - konverteret
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
Jens Gyldenkærne Cla~ (03-03-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 03-03-06 10:27 |
|
Erik Ginnerskov skrev:
> Rettet til:
>
> ConvertValidRSS20TimeStamps = dag & "den" & dd & ". " & mm &
> yyyy & h & ":" & m & ":" & s
Problemet er bare at der er to returlinjer for funktionen - og
ovenstående anvendes kun når der ikke er offset på tidszonen.
>> Ret til MON, TUE etc. - eller evt. mon, tue, wed, og ret
>> Ucase til Lcase.
>
> I princippet ulogisk, da indholdet i de xml-filer jeg hditil
> har kigget på består af uppercase første bogstav og lowercase
> for de to næste.
Du kan også helt undlade UCase, og så bare skrive navnene som de
står i xml-filerne. Så vil funktionen bare fejle hvis en xml-fil
skriver "mon" eller "MON" i stedet for "Mon".
> Begge dele prøvet, intet output.
Problemet er at det feed du tester med har offset - dermed bliver
det linje 70 der returnerer værdien i stedet for linje 31.
Det begynder desværre at blive lidt uskønt i forhold til
overskueligheden - det er ikke så smart at der er defineret et
udskriftsformat to forskellige steder. Man burde lave en løsning
hvor opgaven med at finde datoværdien fra xml-filen var klart
adskilt fra opgaven med at udskrive datoen i et "pænt" dansk format
- men det kan være en opgave til version 1.0.
Foreløbig har jeg lavet en version der fungerer
< http://gyros.dk/usenet/asp/rss2.asp>
< http://gyros.dk/usenet/asp/datotid.inc.txt>
< http://gyros.dk/usenet/asp/feedreader.txt>
Følgende er ændret:
Datotid.inc.asp:
Linje 105-111:
Tilføjet funktionen PadZero (der sørger for at sætte 0 foran tal
mindre end 10).
Linje 83: Rettet Else-delen så der returneres en tom streng i
stedet for 0 (alternativt kunne man returnere "Ukendt" eller
lignende).
Linje 70: Rettet returværdien så ugedag mv. er med. Bemærk at det
ikke er samme format som der anvendes i linje 31. Bemærk også at
man ikke bare kan anvende variablerne yyyy, mm, dd, h, etc. - da
disse netop *ikke* bliver korrigeret i offsetmode-afsnittet (her
oprettes datovariablen tmpDate, og det er dén der indeholder den
rigtige værdi.
For at lave en bedre udgave af hele baduljen bør man adskille
aflæsningen af datoværdien fra udskriften af datoværdien. Det vil
sige at man har to hovedfunktioner:
Function GetDateFromXML(xmlDate)
' Afkod datoværdien fra et feed og returner
' datoen til asp
End Function
Function FormatNiceDate(aspDate)
' Udskriv en datovariabel som ønsket
' (en specialiseret udgave af FormatDateTime)
End Function
Sådan en inddeling vil dels gøre det lettere at bruge funktionerne
(man kan benyte GetDateFromXML til andet end at udskrive datoen, og
man kan udskrive andre datoer end lige xml/rss-datoer på samme
måde) - og dels undgår man fejl som den sidste her i tråden (hvor
en rettelse et sted ikke slår igennem, fordi samme funktionalitet
er defineret et andet sted.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Erik Ginnerskov (03-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 03-03-06 17:58 |
| | |
|
|