vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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???
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 22.03.10 15:43

Was für ein Projekt hast du angelegt? Es geht übrigens auch mit .Net Methoden
 MsgBox("Hallo".IndexOf("a"))
(Ergebnis ist allerdings 1, nicht 2).

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 22.03.10 16:11

Projektname dient auch standardmässig als Namespace, was zu Konflikten führt. Ohnehin sollte man es vermeiden gleiche Namen für unterschiedliche Elemente zu benutzen (ob es nun Projekt, Klasse oder Variable ist) weil das leicht zu Verwechslung und Verwirrung führt. Auch am besten Sonderzeichen u.ä, lieber lassen.

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 22.03.10 16:22

Ich finde es gibt ein paar Dinge, die doch nützlich sind. Für solche String-Methoden zB würde ich aber schon auch die Methoden der String-Klasse nehmen. Es ist lediglich nicht Sinn von .Net, dass alle Sprachen genau gleich sein sollten, bis auf Syntax

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 22.03.10 16:55

Es gibt im FW doch keinen einfachen Ersatz für Split(str, str) zB.

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: Drapondur
Datum: 22.03.10 18:24

Der If-Operator, den GPM verwendet hat, ist typsicher.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 22.03.10 18:34

Eben. Es geht mit
toSplit.Split(New String() {vbCrLf}, irgendeineOption)
was ich etwas umständlich finde.

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: Drapondur
Datum: 22.03.10 18:38

Nochmal: Der If-Operator ist bereits typsicher.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorRalfE (Moderator)
Datum: 23.03.10 11:22

>> Bei einer Textdatei bekomme ich über 'InStr' nur die Position des gesuchten Zeichens und
nicht die Anzahl!??

Die Anzahl musst du selber zählen, solange der String gefunden wird. InStr gibt dir nur an, ob der String gefunden wurde und wenn ja, an welcher Indexposition.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorRalfE (Moderator)
Datum: 23.03.10 12:30

Aus der MSDN zu InStr:
Zitat:

Returns an integer specifying the start position of the first occurrence of one string within another


Wenn du die Anzahl zählen willst, dann erhöht man einen Zähler, solang man den String findet. Dem .NET-Pendant zu InStr - String.IndexOf() - kann man nämlih auch eine Startposition angeben, ab der gesucht werden soll.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorRalfE (Moderator)
Datum: 23.03.10 12:33

Es gibt ein paar finanzmathematische Funktionen, die es so im Framework nicht gibt. Diese leben in der Klasse Microsoft.VisualBasic.Financial.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: ModeratorDaveS (Moderator)
Datum: 23.03.10 16:24

Es ist faszinierend wieviel man zum Thema InStr() schreiben kann.

Aber wir wissen gar nicht was du machst (Code!), nur deine vielen Behauptungen, die ehrlich gesagt wenig Sinn machen. Wir wissen auch nicht was du eigentlich erreichen willst, um nur die Vorkommnisse eines Strings zu zählen gibt es bessere Methoden als InStr(). Wie Ralf aber sagt, InStr() liefert nur den Index zur ersten oder nächsten Instanz und keine Anzahl, egal woher ein String stammt. Ein String ist halt ein String.

Wenn du .Net lernen willst dann vergisst du sowieso besser InStr() und fängst an die .Net Methoden zu verwenden.

________
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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MsgBox(InStr("Hallo", "a")) 
Autor: Winihili
Datum: 25.03.10 19:07

Startpos geht auch in VB
Gruß winihili
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel