| |
VB.NET - Ein- und UmsteigerRe: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 19:55 |
| Hallo!
Ich habe mir den Sachverhalt auch noch einmal
angeschaut. Die IDE spricht von nicht möglicher
Inferenz, d.h. vermutlich 'IF' ist (trotz Object)
als eine generische Funktion ausgelegt. | |
MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 22.03.10 15:31 |
| In einem älteren Projekt habe ich mit 'InStr' gearbeitet.
Jetzt wird mir nur 'Instr' als Namemespace-Instr angeboten!
'InStrRev' läuft nach wie vor!
Wer kann mir helfen??? | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 22.03.10 16:05 |
| Erst mal vielen Dank für die schnelle Antwort.
Ich habe eine ganz normale Windows Forms-Anwendung eröffnet.
Jetzt habe ich das gleiche noch einmal gemacht und als Name 'Hallo' eingegeben.
Dann war alles ok.
Dann habe ich als Name 'InStr' eingegeben; dann konnte ich in diesem Projekt nicht mehr mit
'InStr' arbeiten.
Sollte der Projektname nicht mit einem Befehl identisch sein??
MfG winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 16:16 |
| Ich würde, wenn es mir darum ginge wirklich .NET zu programmieren, auch komplett die Finger vom Microsoft.VisualBasic-Namespace lassen. Ich bin mir nicht sicher, aber z.B. das 0-Index basierte System in .NET passt einfach nicht zu Funktionen, die ein 1-Index basiertes Ergebnis zurück geben.
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 16:26 |
| Kannst du mir ein paar Beispiele nennen?
Vielleicht gebe ich dem Namespace dann doch noch eine Chance. Bisher habe diesen Namespace immer als "inkompatibel" abgetan (wegen dieser Index-Geschichte) und nie benutzt.
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 16:28 |
| Hallo!
Der Namespace Microsoft.Visualbasic enthält diejenigen
Methoden, die VB-spezifisch sind, also keine direkte
Entsprechung in anderen Net-Sprachen haben.
Da sind in erster Linie aus früheren VB-Versionen
bekannte Sachen, aber nicht nur.
Dieser Namespace ist kein Giftschrank, obgleich manche
darin enthaltene Routine "fragwürdig" arbeitet.
MfG
Manfred | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: DaveS (Moderator) | Datum: 22.03.10 16:38 |
| Split() zB. AscW(), ChrW(), Format() vielleicht, einige Date-Funktionen, GetObject() Hex() IIF(), IsNumeric(), UBound(), Now(), wieviele willst du?
________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 16:47 |
| Alle!!!
Nein, nein. IIf() und IsNumeric/IsDate benutze ich tatsächlich regelmäßig. Fällt einem gar nicht so auf.
Die Char-Dinger brauche ich eigentlich nicht und den Rest gibt es doch auch "in .NET".
Wie sieht es da eigentlich mit der Performance aus. Sind die Microsoft.VisualBasic-Funktionen besser oder schlechter oder egal?
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 16:54 |
| Hallo!
Findste gut?
Dim a, b, c As Boolean
c = CType(IIf(True, a, b), Boolean) | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: GPM | Datum: 22.03.10 17:33 |
| Seit VB2008 braucht man IIf auch nicht mehr.
Dim b As Boolean
Me.BackColor = If(b, Color.Red, Color.Blue) MfG GPM 0 | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 17:50 |
| Hallo!
Typsicheres Programmieren sieht anders aus:
Public Function IIf(Of T) _
(ByVal Expression As Boolean, _
ByVal truepart As T, ByVal Falsepart As T) As T
If Expression Then Return truepart
Return Falsepart
End Function | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 22.03.10 18:05 |
| gehört auch dazu:
Wenn ich eine Datei mit 'ReadToEnd' einlese und dann mit 'InStr' versch. Zeichen abfrage
komme ich auf 'völlig Wirre' Antworten.
Kann man das so garnicht verwenden??
MfG winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 18:19 |
| Hallo!
Dann verwendest Du beim Lesen wahrscheinlich einen
für Deinen Dateiinhalt ungeeigneten Encoder. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 18:24 |
| Naja, es gibt doch:
Dim s As String = "was-auch-immer"
Dim sp() As String = s.Split("-"c) Ich weiß, es wird hier Char benutzt, aber ich habe einen Split mit String noch nie gebraucht. Somit reicht mir das.
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Drapondur | Datum: 22.03.10 18:24 |
| Der If-Operator, den GPM verwendet hat, ist typsicher. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 18:26 |
| Wenn ich es so mache wie du, dann kann ich auch gleich eine "richtige" If-Abfrage machen. Es geht (mir) bei dieser Funktion primär darum Code zu sparen, was bei deinem Beispiel nicht der Fall ist.
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Drapondur | Datum: 22.03.10 18:28 |
| Dim splitted As String() = Split(toSplit, vbCrLf) geht nicht mit String.Split(). Kann man schon immer mal wieder gebrauchen. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 18:36 |
| Hallo!
Mein Vorschlag ist eine generische Methode, die
Du für beliebige Typen aufrufen kannst.
Der Aufruf benötigt genausoviel Code
wie das entsprechende IF oder IIF in VB.
Er arbeitet effizienter, weil beim Compiler
typspezifische Übersetzungen erstellt werden
und er vermeidet Laufzeitfehler, wenn
für die Parameter inkompatible Typen verwendet werden.
MfG
Manfred | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Drapondur | Datum: 22.03.10 18:38 |
| Nochmal: Der If-Operator ist bereits typsicher. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Manfred X | Datum: 22.03.10 18:48 |
| Hallo!
Nein! Ist er nicht.
Die Kombatibilität der Argumente wird bei
OPTION STRICT ON zwar überwacht, aber
es handelt sind um OBJECT-Parameter.
Die Durchführung ist deshalb nicht typsicher. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 22.03.10 19:06 |
| aber ich habe doch mit 'ReadToEnd' und einer einfachen Textdatei keine Wahlmöglichkeit oder ??
MfG Winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 22.03.10 19:10 |
| Dim text As String = IO.File.ReadAllText("p:\ath", _
System.Text.Encoding.UTF8) Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Drapondur | Datum: 22.03.10 19:13 |
| Falsch.
Auch mit Option Strict Off kann ich das hier nicht kompilieren.
Dim cl As Object = If(True, Color.AliceBlue, Point.Empty) Das hier Dim cl As Object = If(True, Color.AliceBlue, Color.AntiqueWhite) ergibt dekompiliert (nach C#, weil man es nach VB dekompiliert im Reflector nicht richtig sieht):
object cl = (1 != 0) ? Color.AliceBlue : Color.AntiqueWhite; , was typsicher ist.
Der Unterschied zw. If und Deiner Funktion besteht nur darin, dass Du ein generisches Argument angeben kannst und dass Intellisense bei Deiner Funktion nicht "Object" für die Argumente anzeigt. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Drapondur | Datum: 22.03.10 20:06 |
| Bis auf dass If ein Operator und keine Funktion ist, gebe ich Dir recht. MSDN spricht tatsächlich nicht von Inferenz und da auch Intellisense die Argumente als Objekt anzeigt, könnte man meinen, dass If sich analog zu IIf verhält bis auf die Tatsache, dass IIf immer alle drei Argumente auswertet. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 23.03.10 11:20 |
| Vielen Dank für die Antwort, das hat allerdings nichts geändert.
Ich bin aber ein Stück weiter:
Bei einer Textdatei bekomme ich über 'InStr' nur die Position des gesuchten Zeichens und
nicht die Anzahl!??
Warum ist mir nicht klar.
MfG winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 23.03.10 12:09 |
| Vielen Dank,
mir ist nicht klar, wie ich bei InStr zählen kann und warum sagt mir InStr bei einem eigegebenen
(nicht eingelesenen) String die Anzahl??
MfG winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 23.03.10 15:35 |
| Vielen dank, mit dem Zähler und jeweils neuer Startpos. hab ich verstanden.
Aber warum gibts ein Unterschied zwischen einem festen und einem eingelesenen String??
MfG winihili | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Maas | Datum: 23.03.10 16:42 |
| Naja, du musst schon alle Encodings ausprobieren. Ich weiß doch auch nicht, ob dein Text UTF-8 codiert ist oder nicht.
Maas | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 23.03.10 18:43 |
| Vielen Dank, bei meinem Beispiel war die Position und Anzahl zufällig identisch, das hat
mich verwirrt.
Die besseren methoden zum Zählen (z.B. von vbcrlf) werde ich hoffentlich noch kennenlernen.
Aus msdn hatte ich halt ein Beispiel mit InStr und wollte es dann auch wissen (Ging ja auch) und
wie Du schon sagtest gab es doch viel Intresse!!
Keine weiteren Fragen. | |
Re: MsgBox(InStr("Hallo", "a")) | | | Autor: Winihili | Datum: 25.03.10 19:07 |
| Startpos geht auch in VB
Gruß winihili | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|