Hur gör man för att hoppa över "Case 0" i detta exemplet Varför ha casesatsen. Den saknar funktuin. .. och dessutom tror jag väl att: MAn kan ersätta en bit av en sträng med mid funktionen genom att tilldela värden till den. Notera bara att det är en ineffektiv operation. Det är en service till programmeraren (såsom ^), men använd inte i onödan. Tänk på hur det måste fungera. Tillåten att ändra storlek? Det är det väl ändå inte? Okej, då ger jag mig! =)Hoppa över "Case 0"
Jag vill att det ska börja med "ListIndex 1"
X = List1.ListIndex
Select Case X
Case Is = X
Mid$(Text, 10 + 16 * X, 16) = Text1
End Select
SörenSv: Hoppa över "Case 0"
Du kan skriva:
<code>
X = List1.ListIndex
Select Case X
Case 0
Case Is = X
Mid$(Text, 10 + 16 * X, 16) = Text1
End Select
</code>
Eller:
<code>
X = List1.ListIndex
If x <> 0 Then
Mid$(Text, 10 + 16 * X, 16) = Text1
End If
</code>Sv: Hoppa över "Case 0"
Mid$(Text, 10 + 16 * X, 16) = Text1
skall vara:
Text1 = Mid$(Text, 10 + 16 * X, 16)
eller?Sv: Hoppa över "Case 0"
Exempel:
<code>
Dim Test As string
Test = "xxxxxxx"
Mid(Test, 3, 1) = "y"
Debug.Print Test
</code>
Vilket ger: xxxyxxxSv: Hoppa över "Case 0"
Sv: Hoppa över "Case 0"
Du vill förändra en del av en sträng, men du är samtidigt tillåten att ändra storlek, och alltså funkar inte reference counting, och man kan inte behålla strängens platsw i minnet.
Det som då måste göras är att allokera nytt minne, kopiera första delen av strängen till den platsen i minnet, sen den bytta delsträngen, och sen slutet av strängen, sen frigöra det gamla minnet.
VB kanske gör ett runtime-test för att se om utbytessträngen är lika stor, men då blir det ännu värre om det inte är det...
Sen säger jag inte att det nödvändigtvis finns något bättre sätt, bara att men bör se upp, och inte använda metoden i onödan. På samma sätt är det inget fel att använda ^ om exponenten är en double, men för heltalstyper är det helt vansinnigt.Sv: Hoppa över "Case 0"
<code>
Dim Text As String
Text = "abcdefgh"
Mid(Text, 4, 9) = "DEFGHIJKL"
Debug.Print Text
</code>
Som jag ser det skriver den bar över en del av det minet en sträng pekar på.Sv: Hoppa över "Case 0"
Jag antog helt sonika att det var så det gick till. (Fast jag såg att du skriver Mid och inte Mid$, fyyyyy =). )
Lite förrädiskt är det ju dock...VB bestämmer en hel del om vad man skall göra, och det är inte så lätt att se, heller.
1. I första hand är det startsträngens storlek som betyder nåt, den kommer inte förändras; är det för många tecken specificerade i Mid$-anropet så ignoreras de.
2. Om det är fler tecken i den nya delsträngen än vad som står specificerat i Mid$, så ignoreras de överflödiga.
3. Om det är färre tecken i den nya delsträngen än i Mid$ så tas bara de med, och resten är oförändrat.
Jaja... de har ju i alla fall tänkt på snabbheten i detta fallet. Tycker det är lite konstigt att det inte genereras fel eller att strängen förändras. Det vore det mest rimliga ur VB-anda.
I t.ex. C eller C++ så har man bestämt att kompilatorn inte ska göra några tunga operationer, och ansvaret läggs på programmeraren, till skillnad från VB, där man kan göra tunga saker mycket enkelt, men ibland aningen ineffektivt. Man kan ju ta ^ som exempel, eller typomvandlingarna. Skit samma; nu va det här utrett...