vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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
Dynamisches Bytearray? 
Autor: Lupus52
Datum: 21.12.16 00:29

Hallo,

geht sowas überhaupt? Wenn ja wie? Ich habe jetzt stundenlang erfolglos gelesen und experimentiert.

Ich möchte eine noch unbekannte Zahl von Bytes aus einer Verarbeitung in einer loop nacheinander in ein eindimensionales Bytearray lesen. Beginnend by Platz 0 und dann immer weiter. Es werden maximal ca. 50 Daten sein.

Früher hatte ich das als String mit Anfang String = "". Dann in der Schleife string = string + chr(x)

Ich bekomme Fehlermeldungen aller Art. Im besten Fall nur eine Warnung, das die Variable vor Verwendung noch nicht initialisiert sei und das Fehler geben könnte. Sie wird aber an de Stelle nicht gelesesn sondern beschreiben werden.

Egal wie auch immer. Ich sitze auf dem Schlauch.

Mein Gedanke: (sinngemäß)

dim meinbyte() as byte

for n = 0 to x
meinbyte(n) = wertausverarbeitung(n,irgendwas) ' z.B. eine Funktion die ein Byte liefert
next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: sv00010
Datum: 21.12.16 05:25

Sub Test1()
        Dim Liste_Test  As System.Collections.Generic.List(Of Byte) = Nothing
        Dim n           As Integer = Nothing
        'Wieviele wirklich drin sind weiß ich natürlich nicht
        Dim x           As Integer = 50
        Dim meinByte_Einzeln As Byte = Nothing
 
        Liste_Test = New System.Collections.Generic.List(Of Byte)
 
        For n = 0 To x
            meinByte_Einzeln = wertausverarbeitung(n)
            Liste_Test.Add(meinByte_Einzeln)
        Next
 
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Lupus52
Datum: 21.12.16 07:57

Moin,

danke erst mal. Auf so was wäre ich nie gekommen. Habe ich auch nirgends was in der Art gefunden. Werde das später mal ausprobieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Manfred X
Datum: 21.12.16 09:07

Hallo!

[I]Auf so was wäre ich nie gekommen. Habe ich auch nirgends was in der Art gefunden.[/I]

In diesem Forum gibt es dutzende Beiträge, die den Gebrauch einer
generischen Liste erläutern.

Du bist nicht willens, die Zeit aufzuwenden, die erforderlich ist,
um sich in VB.Net einzuarbeiten. Statt dessen versuchst Du, dieses Forum
zu mißbrauchen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Lupus52
Datum: 21.12.16 09:45

Manfred X schrieb:
Zitat:

Hallo!

[I]Auf so was wäre ich nie gekommen. Habe ich auch nirgends
was in der Art gefunden.[/I]


In diesem Forum gibt es dutzende Beiträge, die den Gebrauch
einer
generischen Liste erläutern.


Dazu muss man erst mal wissen, dass für so was "generische Listen" zu gebrauchen sind! Und wie.

Ich bin nicht als VB-Guru auf die Welt gekommen sondern versuche mich da reinzuarbeiten.

Zitat:

Du bist nicht willens, die Zeit aufzuwenden, die erforderlich
ist, um sich in VB.Net einzuarbeiten.


Ach ne - ich verbinge jeden Tag derzeit und auch schon früher Stunden damit mich durch unzählige Seiten zu arbeiten. Auch Bücher! Bevor(!) ich in einem Forum eine Frage stelle. Das ist immer erst der letzte Schritt!

Deine Behauptung ist echt eine Frechheit!

Zitat:

Statt dessen versuchst Du, dieses Forum zu mißbrauchen.


Also du bist mir echt ein toller Typ. Sowas hat mir noch keiner gesagt. Unverschämter geht es nicht!

Und wenn du mir nicht helfen willst oder kannst, dann lass es einfach sein statt den Forenfrieden mit solchen idiotischen Beiträgen zu stören!

In meinem Motorradforum, welches ich seit über 15 Jahre betreibe, würde ein Member von mir für so einen Beitrag gegenüber einem Anfänger abgemahnt und bei Wiederholung rausgeworfen werden.

Allen andern einen schönen Tag. Und dir mögen die Bytes irgendwo stecken bleiben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Manfred X
Datum: 21.12.16 11:26

In diesem Forum gibt es Regeln.
Eine Regel besagt, daß ein einführendes Lehrbuch zu VB durchzuarbeiten ist,
ehe man Fragen stellt.
Hättest Du das getan, wüßtest Du, was eine generische Liste (oder ein Stringbuilder
oder eine Klasseninstanz usw.) ist.
Ein Guru muß man dafür nicht sein.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Lupus52
Datum: 21.12.16 13:54

Manfred X schrieb:

Zitat:

In diesem Forum gibt es Regeln.
Eine Regel besagt, daß ein einführendes Lehrbuch zu VB
durchzuarbeiten ist,
ehe man Fragen stellt.


Das habe ich zu hundert Themen seit Wochen, Monaten und Jahrfen gemacht! U.a. Thomas Theis - Einführung in VB 2010. Liegt hier gerade neben mir. Und dann diverse Onlinelehrbücher wie z.B. Rheinwerk usw.

Aber ich muss mich hier nicht vor einem wie dir rechtfertigen und beweisen, was ich schon alles gelesen habe.

Genau genommen arbeite ich mit VB seit VB4 immer wieder mal sporadisch. Es ist quasi eines meiner kleinen Hobbies. Habe also auch die Literatur seit dieser Zeit und weit davor. Bis zu BASICA und GWBASIC!

Trotzdem erlaube ich mir auch das Eine oder Ander nicht verstanden zu haben.

Und deshalb erlaube ich mir auch hier zu fragen! Ob es dir passt oder nicht.

Zitat:

Hättest Du das getan, wüßtest Du, was eine generische Liste
(oder ein Stringbuilder oder eine Klasseninstanz usw.) ist.


Ich habe es getan - und tue es immer wieder

Postings deiner Art helfen keinem hier. Im Gegenteil. Man verliert ganz schnell die Lust hier noch mal zu fragen und geht woanders hin, wo man freudlicher als Mensch, der was lernen möchte, behandelt wird.

Hier ist das dank deiner Wichtigtuerei momentan nicht der Fall!

So - das war mein letzer Kommentar diesbezüglich. Ich werde auf weitere Einlassungen dieser Art von dir nicht mehr reagieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: sv00010
Datum: 21.12.16 17:42

Lupus52 schrieb:
Zitat:


Das habe ich zu hundert Themen seit Wochen, Monaten und
Jahrfen gemacht! U.a. Thomas Theis - Einführung in VB 2010.
Liegt hier gerade neben mir. Und dann diverse
Onlinelehrbücher wie z.B. Rheinwerk usw.

Ich habe das Gefühl du fällst beim Laufen über deine eigenen Beine.
Eventuell solltest du in vb.net mal etwas ganz anderes programmieren (einfach so zum Spaß).
Das ist wichtig, weil wenn du dir stundenlang mit Internetrecherche einen abrackerst, um dein Problem zu lösen und es dann doch nicht hinbekommst, bekommst du irgendwann mal mental ein richtiges Problem (Depressiv usw.).
Dann drehst du nur noch an der Uhr und bekommst überhaupt nichts mehr hin.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: sv00010
Datum: 21.12.16 20:04

Zitat:


Also du bist mir echt ein toller Typ.

Ich weiß, das war ironisch gemeint, aber Manfred X ist wirklich so einer der zu fast jeden Thema irgendwie etwas weiß.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: VB3-Guru
Datum: 25.12.16 19:23

Es ist auch in Vb.Net noch genauso einfach wie unter VB5 oder VB6.

Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        Dim B() As Byte
        ReDim B(50)
        For i = 0 To 50
            B(i) = 64 + i
        Next
 
        ReDim Preserve B(200) ' Array vergrößern ohne es zu löschen
 
        For i = 51 To 150
            B(i) = 64 + i
        Next
 
        ReDim Preserve B(150) ' Array wieder verkleinern ohne es zu löschen
 
    End Sub
End Class
Collections o. generische Listen o.Ä. brauchst du dazu nicht. Dazu brauchst du auch kein Buch zu lesen.

In das Byte-Array kannst du Textzeichen einfügen oder was auch immer du willst. Deine Methode mit dem String funktioniert auch noch genauso wie früher.

Für ein Byte-Array extra ne Collection zu bemühen, halt ich für etwas übertrieben.

Komische Sitten haben die hier . Wo steht denn das, dass man hier erstmal ein Buch gelesen haben muss, um ne einfache Frage zu stellen.

lg Vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dynamisches Bytearray? 
Autor: Manfred X
Datum: 25.12.16 22:09

Hallo!

... und auch Dir würde ich raten, erst mal ein gutes Buch zu VB.Net zu studieren.

Die generische Liste ist die effiziente und anwendungssichere Framework-Klasse
um dynamisch eine wechselnde Anzahl von Einträgen zu verarbeiten.

Die VB6-Methode Redim Preserve ist demgegenüber veraltet.
Generische Listen haben auch nichts mit der VB6-Collection zu tun.

Wer VB6 noch nutzen möchte, kann das weiterhin tun.
Der Umstieg auf VB.Net erfordert neue Einarbeitung, insbesondere in
die vielfältigen Konzepte und Klassen des Framework.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Redim Preserve 
Autor: VB3-Guru
Datum: 25.12.16 22:27

LOL, wie bist du denn drauf? Die Frage war nach einem dynamischen Bytearray (siehe Titel). Die hab ich im Gegensatz zu euch beantwortet. An einem Redim Preserve ist nichts veraltet, selbst wenn du es gerne hättest, um mit deinen.net-Künsten zu reüssieren.

Bist du jetzt hier der King? Ein Ersatz für Lordchen?

vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: Manfred X
Datum: 26.12.16 00:05

Nun ja, ich bin natürlich kein Guru,
erlaube mir aber auf folgendes hinzuweisen:

- es gibt keine dynamischen Arrays; Arrays haben eine feste Länge
- "Redim Preserve" erstellt ein neues Array und kopiert die vorhandenen Elemente (=ineffizient)
- die generische Liste ist - anders als das Array - tatsächlich dynamisch verwaltet
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: VB3-Guru
Datum: 26.12.16 12:08

Zitat:

- es gibt keine dynamischen Arrays; Arrays haben eine feste Länge

Selbstverständlich gibt es diese. Oder hast du mal im RAM kontrolliert und nachgeschaut, was da passiert? Hast du die Fehlinformation aus Büchern?

Für den Benutzer ist es aber unerheblich. Arrays können erstellt werden und es gibt ein Redim Preserve. Für sowas simples wie ein Bytearray braucht man keine Collection. Oder würdest du für ne Bitmap von 1000*1000 Pixeln ne Collection erstellen. Das wäre albern und du kannst das Bild nicht einfach mal so in ne Picturebox bringen oder es auf Platte dumpen.

Ich glaub du musst selbst noch einiges lernen.

vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: sv00010
Datum: 26.12.16 19:06

VB3-Guru schrieb:
Zitat:


Ich glaub du musst selbst noch einiges lernen.

Es geht hier in diesem Forum um Lösung von Problemen und nicht darum einen "Glaubenskrieg" vom Zaun zu brechen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: VB3-Guru
Datum: 26.12.16 19:29

Obiges Zitat war nicht an dich, sondern an denjenigen gerichtet, der hier einem User empfiehlt erstmal ein Buch zu lesen. Ich hab lediglich gezeigt, wie man ein dynamisches Byte-Array verwendet (das war die Frage von Lupus). Byte- oder sonstige Arrays sind keineswegs veraltet.

Deinen Codevorschlag werd ich mir gerne mal ansehen, obwohl ich glaube, dass die Collection das ganze Array zerlegt, so dass es dann nicht mehr in einem Block zusammenhängt. Wie die Collection, bzw. der Inhalt derselben dann im Speicher liegt, muss ich mir erstmal ansehen. Muss mal sehen, ob ich ein Peek (oder Poke) in .net finde

lg, Vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: effeff
Datum: 26.12.16 19:51

Laut Definition von Microsoft sind Arrays mit einer festen Länge belegt und NICHT dynamisch. Dynamisieren muss man dass dann eben mit dem Redim Preserve selber. M$ schreibt dazu unter anderem: "allerdings muss die Größe beim Erstellen des Arrays festgelegt werden". Also: Feste Größe!

Im Prinzip ist meiner Meinung nach egal, ob man Arrays oder Auflistungen benutzt für die gestellten Anforderungen in diesem Fall. Ich hätte selber auch ein Array genommen, da anscheinend nur "nach hinten raus" Erweiterungen stattfinden. Sollte mittendrin eingefügt werden müssen oder gelöscht werden müssen, dann wäre ein Array sowieso völlig ungeeignet.

Vielleicht sollte Lupus einfach nur einen anderen Weg gehen und eine HashTable benutzen...

        Dim ht As New Hashtable
 
        Dim i As Integer
 
        For i = 1 To 50
            ht.Add(i, "chr(" & i & ")")
        Next
 
        MessageBox.Show(ht(25))
Diejenigen, die sich ein bisschen weiter bilden möchten, können hier was zum Thema lesen und sich selber ein Bild machen: https://msdn.microsoft.com/de-de/library/9ct4ey7x(v=vs.90).aspx

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: VB3-Guru
Datum: 26.12.16 22:05

Zitat:

Vielleicht sollte Lupus einfach nur einen anderen Weg gehen

Ach was, er kriegt nen String von einem Meßgerät von gerade mal 12 Byte. Und er will einen im gleichen Format zurücksenden. Da arbeitet man am besten mit Strings oder eben mit Byte-Arrays (was effektiv dasselbe ist, bis auf die Tatsache, dass ein einzelnes Zeichen im String 2 Byte belegt. Letzteres versteht das Meßgerät natürlich nicht. Man muss daher dafür soregen, dass das gerät nur die gewünschten Bytes sieht und nicht die Nullbytes mit denen der Unicode-String aufgefüllt ist. In Vb6 nimmt man dazu Strconv(). Für Vb.Net wirds ein Pendent geben.

lg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: Manfred X
Datum: 27.12.16 10:41

Für Mitlesende

Bitte nicht verwirren lassen.
Es gibt im Framework keine "dynamischen" Arrays.

Für Auflistungen, bei denen Elemente eingefügt, angefügt oder
gelöscht werden sollen, steht die generische Listen-Klasse zur Verfügung.
Man gibt am besten im Konstruktor einen Kapazitätswert (Schätzung der maximal
erwartete Listenlänge) vor.
Intern wird dann ein entsprechend dimensioniertes Array erzeugt,
dessen Elemente (extern sichtbar: variable Anzahl, Count) mit
den Listenoperationen bearbeitet werden können.
Sollte die vorgegebene Kapazität überschritten werden
(z.B. wegen Add, Addrange, Insert, Insertrange), erfolgt durch die
Listenklasse automatisch eine entsprechende Anpassung (Verlagerung
der Listenelemente in ein größeres Array).

Eine der Gründe, weshalb man das Framework nutzt, besteht gerade darin,
daß zur Laufzeit im Hintergrund stets ein aufwendiger Algorithmus arbeitet,
der die Objekte im Speicher verwaltet (z.B. Freigabe) und den Speicher
regelmäßig optimiert.
Zur Fragmentierung kann es deshalb nur kommen, wenn Speicherbereiche vom
Programmierer ausdrücklich "gepinned" werden, z.B. um nicht verwaltete Objekte
oder Daten dort ablegen und auf sie per Zeiger zugreifen zu können (Sonderfall).
Nur solche Speicherbereiche müssen im VB-Anwendungs-Programm explizit verwaltet
werden. Hierbei können Programm-Mängel zu ineffizienter Speichernutzung
und zu Überläufen führen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Redim Preserve 
Autor: effeff
Datum: 27.12.16 22:08

Schrubte ich doch...
Zitat:

Ich hätte selber auch ein Array genommen


Zitat:

In Vb6 nimmt man dazu Strconv(). Für Vb.Net wirds ein Pendent geben.

Latürnich...
Strings.StrConv
Also: Helm wieder auf und weiter!

EALA FREYA FRESENA

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