webForumDet fria alternativet

2 funktioner

ASP

9 svar · 319 visningar · startad av SannyW

Medlem sedan jan. 2003438 inlägg
Frågan#1

Hej!

Har två funktioner som borde gå att få till en, problemet är att jag inte fattar hur jag skall göra. Har letat i forumet men hjärnan får inte ihop 1+1 idag.

Function sNamn(dMonth,iCounter)
  If dMonth = 1 And iCounter = 1 Then sNamn = "Namnsdag"
Function cNamn(dMonth,iCounter)
  If dMonth = 1 And iCounter = 1 Then cNamn = "Citat"

Detta funkar INTE men tanke mässigt skulle det väl se ut så här:

Function sNamn, cNamn(dMonth,iCounter)
  If dMonth = 1 And iCounter = 1 Then 
      sNamn = "Namnsdag" 
      cNamn = "Citat"

Hoppas någon har tid och lust att hjälpa mig med ovanstående, får gärna förklara också.

Tack på förhand.

Medlem sedan nov. 20022 355 inlägg
#2

har du inte bara missat

End if

som en sista rad?

Medlem sedan jan. 2003438 inlägg
#3

Nä, får följande fel:

Kompileringsfel i Microsoft VBScript (0x800A03ED)
'(' förväntas.

Function sNamn,cNamn(dMonth,iCounter)

Om jag gör två funktioner av dem som ovan separat så funkar det, men inte då jag försöker slå ihop dem.

Medlem sedan juni 2004533 inlägg
#4

En funktion kan bara ha ett namn och ett returvärde. Vad är det du försöker åstadkomma egentligen, hur hade du tänkt att använda den?

Medlem sedan jan. 2003438 inlägg
#5

Detta funkar:

Function sNamn(dMonth,iCounter)
  If dMonth = 1 And iCounter = 1 Then sNamn = "Nyårsdagen" 
  If dMonth = 1 And iCounter = 2 Then sNamn = "Svea"
End Function

Function cNamn(dMonth,iCounter)
  If dMonth = 1 And iCounter = 1 Then cNamn = "Alla vägar bär till rom." 
  If dMonth = 1 And iCounter = 2 Then cNamn = "Jag har märkt att mäniskor som kommer sent ofta är bra mycket gladare än de som får vänta på dem"
End Function

Sedan skriver jag ut det på en annan sida med:

Dim dDate, dYear, dMonth, iCounter, sOutput, sOutput2
Dim sOutput3

dDate = Date()

dMonth = Month(dDate)
iCounter = Day(dDate)

  If CInt(Month(Date) & Day(Date)) = CInt(dMonth & iCounter) Then
  
  sOutput =  sNamn(dMonth,iCounter) & "<br>" & VbCrLf
  sOutput2 = sNamn(dMonth,iCounter+1) & VbCrLf
  sOutput3 =  cNamn(dMonth,iCounter+1) & VbCrLf

End If

Men jag tycker det blir lite onödigt att behöva skriva "samma" information 2 ggr.

Medlem sedan juni 2004533 inlägg
#6

Du kan göra en subrutin där du sätter värdena:

Sub GetDayInfo(dMonth, iCounter, sNamn, cNamn)

Medlem sedan jan. 2003438 inlägg
#7

Har knåpat lite men är inte riktigt med på hur Guffa menar att jag skall kunna använda sNamn och cNamn.

Fått fram följande:

<%
Sub GetDayInfo(dMonth, iCounter)

  If dMonth = 5 And iCounter = 22 Then 

	sNamn = "Nyårsdagen" 
	oNamn = "Alla vägar bär till rom"

  End if

End Sub

dDate = Date()

dMonth = Month(dDate)
iCounter = Day(dDate)

GetDayInfo dMonth,iCounter

Dim sNamn, oNamn

Response.write sNamn
Response.write "<br>"
Response.write oNamn

%>

Nu funkar det som skall vara samma dag, men möjligheten att också visa morgondagens t ex sNamn funkar inte. Alltså iCounter+1

Går detta att lösa?

Medlem sedan jan. 2003438 inlägg
#8

Har hittat en lösning, men det känns som det finns ett bättre sätta att lösa problemet.....kommentera gärna om det borde lösas annorlunda.

skrev till efter sista Response.write:

GetDayInfo dMonth,iCounter+1
Response.write sNamn
Response.write "<br>"
Response.write oNamn
Medlem sedan juni 2004533 inlägg
#9

Nu använder du globala variabler som du sätter värden på i subrutinen. Det är inte så bra eftersom det blir spaghettikod.

Att anropa subrutinen med iCounter+1 fungerar inte alls bra. Ifall det vore den 31:e maj så skulle du anropa subrutinen med datumet den 32:a maj... Skicka in datumet i subrutinen istället. Använd DateAdd för att lägga på en dag, så får du ett korrekt datum.

<%
Sub GetDayInfo(ByVal datDay, ByRef strName, ByRef strSaying)
	Dim lngMonth, lngDay

	lngMonth = Month(datDay)
	lngDay = Day(datDay)

	If lngMonth = 5 And lngDay = 22 Then 
		strName = "Nyårsdagen" 
		strSaying = "Alla vägar bär till rom"
	End If
End Sub

Dim strName, strSaying

GetDayInfo Date(), strName, strSaying
Response.Write strName
Response.Write "<br>"
Response.Write strSaying

GetDayInfo DateAdd("d", 1, Date()), strName, strSaying
Response.Write strName
Response.Write "<br>"
Response.Write strSaying
%>
Medlem sedan jan. 2003438 inlägg
#10

Tack för hjälpen Guffa, du har ju så rätt i det du säger om datumen och iCounter+1. Din omskrivning funkar perfekt och varit till stor hjälp.

Passar även på att tacka för intressant läsning på

Guffa.com

280 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
150 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)