Hej! Först tack för att du alltid försöka hjälpa! Har jag fattat det rätt så har du alltså ett skiftschema som spänner över 35 dagar och därefter upprepar sig? Ja korrekt, skiftcykeln består av 35 dagar sedan börjar det om. Nåt sånt här kanske skulle kunna funka? Ett stort tack för din hjälp, ska genast börja analysera din kod,Variabel utanför loop aktiveras
Om jag har en loop typ:
Countday = 0
Do Until Countday > 5000
Countday = Countday + 35
Loop
Sedan har en variabel utanför loopen:
if dag(1) = countday then
end if
Som det är nu måste jag ha if-satsen inne i loppen för att
dag(1) ska känna av att countday blir 35 eller 70 och så vidare...
Finns det något sätt att integer countday kan aktiveras utanför loopen medan den snurrar
Tack på förhand för support!
Visual Basic 2010 används.
/LasseSv:Variabel utanför loop aktiveras
Har lyckats löst mina problem en gång men tyvärr blev programmet
alldeles för segt pga för många loopar. Måste nu tänka om för mitt skiftschema.
Jag har ett utgångsdatum (eller det blir 35 utgångsdatum till sist)
datdatum1 = DateSerial(intthisyear, 7, 1) ' 2013,7,1
Sedan ska jag med denna rad (eller snarare 31 för hela månaden augusti , tar en i taget)
datdag(1) = DateSerial(intthisyear, intthismonth, 1)
Jag ska söka efter att det gått 35 dagar eller +35 dagar alltså 35, 70, 105 osv... (för detta tal ökar när åren eller månaderna går)
mellan utgångsdatum och datdag(1).
Får göra så för alla dagar i månaden.
35 dagar blir det på datdag(5) och if-sats utförs genom att skriva ut rätt labels på rätt rad Fm, Em eller N.
Som sagt hade jag loopar som gjorde detta och det fungerade men det blev segt.
Kruxet är att jag måste ha 35 utgångsdatum och leta efter 35 dagar gått för att
gå igenom alla alternativ för att Fm, Em eller N ska hamna på rätt rad (dag).
Mitt program ser ut som en uppslagen bok, på ena sidan 1- 14 dagar,
andra sidan 15-31.
Jag måste gå igenom dag för dag för att se om det ska vara t.ex Fm, Fm, N
på den raden och det gör jag genom att ta ett ursprungsdatum där den raden finns och sedan
söka efter + 35 dagar när den raden dyker upp igen.
Sedan får jag göra så med 35 ursprungsdatum innan skiftschema-cykeln är slut.
Som sagt mastigt och kanske olösligt men man lär sig i alla fall lite programmering under tiden :)
/LasseSv: Variabel utanför loop aktiveras
D.v.s. att dag 1 har samma skift som dag 36, 71, 106, ..., (35 * N) + 1, etc?Sv:Variabel utanför loop aktiveras
Men kruxet är att för t.ex Augusti så måste man kolla dag för dag (31 dagar)
om det är en av dessa 35 dagar så jag kan skriva ut rätt skift på den raden.
Jag hade loopar som kollade dag för dag men det blev för många ett hundratal
så programmet blev segt. Skulle säkert kunna göra ett fåtal loopar i stället
men vet inte om programmet blir snabbare för det eftersom ett par loopar
ska göra samma arbete som många.
/LasseSv: Variabel utanför loop aktiveras
Public Class SkiftSchema
Private schema As Dictionary(Of Long, String)
Private startdate As DateTime
Public Sub New()
InitiateSchema()
End Sub
Private Sub InitiateSchema()
schema = New Dictionary(Of Long, String)
' TODO: Läs in ursprungsschemat från nån extern källa istf att hårdkoda in det
startdate = New DateTime(2013, 1, 1)
schema.Add(0, "FM") ' motsvarar startdate
schema.Add(1, "FM") ' motsvarar startdate + 1
schema.Add(2, "FM") ' motsvarar startdate + 2, etc
schema.Add(3, "FM")
schema.Add(4, "--")
schema.Add(5, "--")
schema.Add(6, "EM")
schema.Add(7, "EM")
schema.Add(8, "EM")
schema.Add(9, "EM")
schema.Add(10, "EM")
schema.Add(11, "--")
schema.Add(12, "--")
schema.Add(13, "N")
schema.Add(14, "N")
schema.Add(15, "N")
schema.Add(16, "N")
schema.Add(17, "N")
schema.Add(18, "--")
schema.Add(19, "--")
schema.Add(20, "--")
schema.Add(21, "--")
schema.Add(22, "FM")
schema.Add(23, "FM")
schema.Add(24, "EM")
schema.Add(25, "EM")
schema.Add(26, "N")
schema.Add(27, "--")
schema.Add(28, "--")
schema.Add(29, "FM")
schema.Add(30, "FM")
schema.Add(31, "EM")
schema.Add(32, "EM")
schema.Add(33, "N")
schema.Add(34, "--")
End Sub
Public Function GetSkiftStringForDate(d As DateTime) As String
Dim diff As Long = DateDiff(DateInterval.Day, startdate, d)
Dim skiftstring As String = ""
diff = diff Mod 35
If (diff < 0) Then ' startdate > d
diff = 35 + diff
End If
If (schema.TryGetValue(diff, skiftstring)) Then
Return skiftstring
End If
Return "??" ' Shouldn't Happen™
End Function
End Class
' exempel på användning:
Dim y As Integer = 2013
Dim m As Integer = 8
Dim skiftSchema = New SkiftSchema()
For d As Integer = 1 To DateTime.DaysInMonth(y, m)
Labels(d).Text = skiftSchema.GetSkiftStringForDate(New DateTime(y, m, d))
Next d
Sv:Variabel utanför loop aktiveras
vill gärna förstå något innan jag använder det :)
/Lasse