Forum

Αναζήτηση στο ms-office.gr

Πάμε!
ms-office.gr > Forum > Microsoft Office > Visual Basic for Applications (VBA) > Πως μπορω να διαβάσω Bytes ;

Visual Basic for Applications (VBA) Ερωτήσεις / Απαντήσεις σε σχέση με τη χρήση της VBA.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 10-05-11, 17:41
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 06-05-2011
Μηνύματα: 8
Προεπιλογή Πως μπορω να διαβάσω Bytes ;

Καλησπέρα

Πως μπορώ να διαβάσω Bytes απο ενα Texbox.
Παράδειγμα: αν εχω 17 Bytes σε ενα TexBox, θέλω να του πω διαβασε το πρώτο Byte αν ειναι 1 ή 0 να το αποθηκεύει σε μια μεταβλητή και αν γίνετε να το σβήνει απο το Texbox ή να το αγνοεί για να μπορω να διαβάσω ξεχωριστά τα αλλα 16 Bytes
Απάντηση με παράθεση
  #2  
Παλιά 10-05-11, 21:26
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 1.328
Προεπιλογή

Καλησπέρα Γιώργο!

Τα Bytes σου είναι 18, όχι 17.

Αυτό συμβαίνει επειδή η VB λειτουργεί με συμβολοσειρές Unicode που σημαίνει ότι κάθε σύμβολο αποτελείται από 2 Bytes (ASCII = 8 Bit, Unicode = 16 Bit).

Θα πρέπει λοιπόν να μετατρέψεις το κείμενο του TextBox σε ASCII χρησιμοποιώντας τη συνάρτηση StrConv (για VB, VBA) και μετά να το περάσεις σε ένα Byte-array από όπου θα μπορείς να ελέγξεις τα Byte.


Παράδειγμα:
Κώδικας:
    'VB6
    Sub CheckFirstByte()
        Dim n As String
        Dim b() As Byte
        Dim i As Integer
        n = vbNullChar & "αβγ"  ' vbNullChar to Byte = 0
        b = StrConv(n, vbFromUnicode)
    Debug.Print "Bytes: "; UBound(b) + 1
        If b(0) = 0 Then
            Debug.Print("First Byte was 0")
            For i = 1 To UBound(b)
                Debug.Print(b(i))
            Next
        End If
    End Sub

    ' στη VB.Net:
    Private Sub CheckFirstByte()
        Dim n As String
        Dim b() As Byte
        n = vbNullChar & "αβγ"
        b = System.Text.Encoding.GetEncoding(1252).GetBytes(n) ' 1253 για την ελληνική κωδικοποίηση
        Debug.Print("Bytes: " & UBound(b) + 1)
        If b(0) = 0 Then
            Debug.Print("First Byte was 0")
            For i = 1 To UBound(b)
                Debug.Print(b(i))
            Next
        End If
    End Sub
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #3  
Παλιά 11-05-11, 15:46
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 06-05-2011
Μηνύματα: 8
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Tasos Εμφάνιση μηνυμάτων
Καλησπέρα Γιώργο!

Τα Bytes σου είναι 18, όχι 17.

Αυτό συμβαίνει επειδή η VB λειτουργεί με συμβολοσειρές Unicode που σημαίνει ότι κάθε σύμβολο αποτελείται από 2 Bytes (ASCII = 8 Bit, Unicode = 16 Bit).

Θα πρέπει λοιπόν να μετατρέψεις το κείμενο του TextBox σε ASCII χρησιμοποιώντας τη συνάρτηση StrConv (για VB, VBA) και μετά να το περάσεις σε ένα Byte-array από όπου θα μπορείς να ελέγξεις τα Byte.


Παράδειγμα:
Κώδικας:
    'VB6
    Sub CheckFirstByte()
        Dim n As String
        Dim b() As Byte
        Dim i As Integer
        n = vbNullChar & "αβγ"  ' vbNullChar to Byte = 0
        b = StrConv(n, vbFromUnicode)
    Debug.Print "Bytes: "; UBound(b) + 1
        If b(0) = 0 Then
            Debug.Print("First Byte was 0")
            For i = 1 To UBound(b)
                Debug.Print(b(i))
            Next
        End If
    End Sub

    ' στη VB.Net:
    Private Sub CheckFirstByte()
        Dim n As String
        Dim b() As Byte
        n = vbNullChar & "αβγ"
        b = System.Text.Encoding.GetEncoding(1252).GetBytes(n) ' 1253 για την ελληνική κωδικοποίηση
        Debug.Print("Bytes: " & UBound(b) + 1)
        If b(0) = 0 Then
            Debug.Print("First Byte was 0")
            For i = 1 To UBound(b)
                Debug.Print(b(i))
            Next
        End If
    End Sub
Φιλικά

Τάσος
Καλησπέρα

Έχω κάτι στο μυαλό μου προσπαθώ να το ολοκληρώσω αλλά δεν ξέρω αν το πηγαίνω σωστά.
Μου είχες στείλει και ένα άλλο πρόγραμμα για να διαβάζω κωδικούς από ένα txt αρχείο αυτό είναι μια χαρά. Το πρόβλημα είναι ότι έρχεται και ένας χαρακτήρας 1 ή 0 μπροστά από το κωδικό ανάλογα από πού θα γίνει η ανάγνωση του(Πόρτα εισόδου ή Πόρτα εξόδου). Πως μπορώ να ταιριάξω τα παρακάτω προγράμματα έτσι ώστε αν ο κωδικός ξεκινά με χαρακτήρα 1 να μου λέει ότι ο πρώτος χαρακτήρας είναι 1 ή 0 και μετά να τον αγνοεί και να ελέγχει τους υπόλοιπους χαρακτήρες ανοίγοντας το αρχείο txt και αν βρει τον κωδικό να μου ότι ο κωδικός είναι στο αρχείο.

Private Sub OKToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKToolStripMenuItem.Click


Dim StreamToDisplay As IO.StreamReader
Dim x As String, CompareString As String, CodeFound As Boolean
Me.TextBox1.Text = vbNullString
CompareString = Me.txtkodikos.Text
Try
StreamToDisplay = New IO.StreamReader("C:\Energa klidia.txt")
Catch
If StreamToDisplay Is Nothing Then
MsgBox("File not found!")
Exit Sub
End If
End Try
Do Until StreamToDisplay.EndOfStream
x = StreamToDisplay.ReadLine
If x = CompareString Then
CodeFound = True
Exit Do
End If
Loop

If CodeFound = True Then
TextBox1.Text = ("Ο κωδικός υπάρχει")
Else
TextBox1.Text = ("Άκυρος κωδικός!")
End If
StreamToDisplay.Close()
'___________________________________________'
Dim n As String
Dim b() As Byte

n = vbNullChar & txtkodikos.Text
b = System.Text.Encoding.GetEncoding(1252).GetBytes(n) ' 1253 για την ελληνική κωδικοποίηση
TextBox2.Text = ("Bytes: " & UBound(b) + 1)
For i = 1 To UBound(b)
Debug.Print(b(i))
If b(0) = 0 Then
TextBox2.Text = ("First Byte was 0")
End If
If b(0) = 1 Then
TextBox2.Text = ("First Byte was 1")


End If
Next






End Sub
Απάντηση με παράθεση
  #4  
Παλιά 11-05-11, 16:03
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 1.328
Προεπιλογή

Γιώργο, ο κωδικός που ο πρώτος χαρακτήρας είναι 1 ή 0 αν κατάλαβα καλά προέρχεται;
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #5  
Παλιά 11-05-11, 16:12
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 06-05-2011
Μηνύματα: 8
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Tasos Εμφάνιση μηνυμάτων
Γιώργο, ο κωδικός που ο πρώτος χαρακτήρας είναι 1 ή 0 αν κατάλαβα καλά προέρχεται;
Έχω δυο αναγνώστες σε πόρτα εισόδου και εξόδου. Το χαρακτήρα 1 ή 0 τον στέλνω εγώ μέσω του μικροελεγκτή για να ξέρω ποια πόρτα άνοιξε αλλά όταν γίνετε η ανάγνωση του κωδικού μου έρχεται κολλητά στον κωδικό το 1 ή το 0. Αν δεν στείλω 1 ή 0 έρχεται μόνο ο κωδικός και αυτό δουλεύει μια χαρά .
Απάντηση με παράθεση
  #6  
Παλιά 11-05-11, 17:13
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 1.328
Προεπιλογή

Γιώργο γνωρίζω ελάχιστα πράγματα για το έργο σου για να μπορέσω να σε ακολουθήσω.
Που μπορούμε να βρούμε αυτόν τον κωδικό για να τον επεξεργαστούμε; Σε πεδίο μήπως;
Δώσε μας τα φώτα σου!
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #7  
Παλιά 11-05-11, 17:53
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 06-05-2011
Μηνύματα: 8
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Tasos Εμφάνιση μηνυμάτων
Γιώργο γνωρίζω ελάχιστα πράγματα για το έργο σου για να μπορέσω να σε ακολουθήσω.
Που μπορούμε να βρούμε αυτόν τον κωδικό για να τον επεξεργαστούμε; Σε πεδίο μήπως;
Δώσε μας τα φώτα σου!
Είναι από την Tibbo, το πρόγραμμα που τρέχει ο μικροελεγκτης μοιάζει με Basic . Οι κωδικοί που διαβάζω είναι απλοί κωδικοί αν έχετε ακουστά από τα κλειδιά iButton σε χαρακτήρες ASCII κάπως έτσι 01ADCFB312000012. Ο μικροελεγκτης επικοινωνεί με τον υπολογιστή με δίκτυο Ethernet. Δεν ξέρω αν έγινα κατανοητός.
Απάντηση με παράθεση
  #8  
Παλιά 11-05-11, 19:39
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 1.328
Προεπιλογή

Γιώργο μου καλά όλα αυτά.
Εγώ στον κώδικα πώς θα επικαλεστώ αυτόν τον κωδικό προκειμένου να σε βοηθήσω;

Που βρίσκεται πάνω στη φόρμα;
Τι όνομα έχει το πεδίο ή η μεταβλητή που τον περιέχει;

Έχουμε λοιπόν τον κωδικό 01ADCFB312000012 έστω με τη μεταβλητή strTibbo

Για να ελέγξουμε αν το πρώτο του ψηφίο είναι 1 ή 0 χρησιμοποιούμε:

Κώδικας:
            Dim strTibbo As String = "01ADCFB312000012"
            If Strings.Left(strTibbo, 1) = 0 Or Strings.Left(strTibbo, 1) = 1 Then
                  MsgBox("Ο κωδικός αρχίζει από " & Strings.Left(strTibbo, 1))
                   strTibbo = Strings.Mid(strTibbo, 2) ' Ο κωδικός χωρίς το πρώτο ψηφίο

                    '  ... Εδώ ο κώδικας που κάνει την αναζήτηση στο αρχείο  Energa klidia.txt
             End If
Καλή συνέχεια!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #9  
Παλιά 11-05-11, 20:55
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 06-05-2011
Μηνύματα: 8
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Tasos Εμφάνιση μηνυμάτων
Γιώργο μου καλά όλα αυτά.
Εγώ στον κώδικα πώς θα επικαλεστώ αυτόν τον κωδικό προκειμένου να σε βοηθήσω;

Που βρίσκεται πάνω στη φόρμα;
Τι όνομα έχει το πεδίο ή η μεταβλητή που τον περιέχει;

Έχουμε λοιπόν τον κωδικό 01ADCFB312000012 έστω με τη μεταβλητή strTibbo

Για να ελέγξουμε αν το πρώτο του ψηφίο είναι 1 ή 0 χρησιμοποιούμε:

Κώδικας:
            Dim strTibbo As String = "01ADCFB312000012"
            If Strings.Left(strTibbo, 1) = 0 Or Strings.Left(strTibbo, 1) = 1 Then
                  MsgBox("Ο κωδικός αρχίζει από " & Strings.Left(strTibbo, 1))
                   strTibbo = Strings.Mid(strTibbo, 2) ' Ο κωδικός χωρίς το πρώτο ψηφίο

                    '  ... Εδώ ο κώδικας που κάνει την αναζήτηση στο αρχείο  Energa klidia.txt
             End If
Καλή συνέχεια!

Τάσος
Τάσο ευχαριστώ πολύ για την βοήθεια.
Τελικά το έκανα αλλιώς.
Διάβαζε τον κωδικό πχ << 01ADCFB312000012 >> αλλά όπως είπα ήθελα να έλεγχο και ποια πόρτα άνοιξε έτσι μαζί με αυτόν τον κωδικό μου ερχόταν και ένας 1 ή 0 από μπροστά δηλαδή πχ << 1 01ADCFB312000012>> και τον διάβαζε σαν άκυρο κωδικό. Αυτό που έκανα είναι

Dim rawstr, cleanstr As String

rawstr = txtkodikos.Text ‘βάλε τον κωδικό στην μεταβλητή rawstr cleanstr = rawstr.Remove(0, 1)’σβησε τον πρώτο χαρακτηρα και βαλε τον
‘νέο κωδικό στην μεταβλητή cleanstr
txtNote.Text = cleanstr ‘εμφανισε τον νέο κωδικό
παρακάτω έβαλα το πρόγραμμα να διαβάζει τον κωδικό από την μεταβλητή cleanstr και δούλευε καλά.

Ευχαριστώ πολύ και πάλι με βοήθησες πολύ.
Απάντηση με παράθεση
Απάντηση στο θέμα

Εργαλεία Θεμάτων
Τρόποι εμφάνισης

Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Γενικά] Πως μπορώ να μεταφέρω τα δεδομένα που θα επιλέγω από μια στήλη σε μια άλλη sakplak Excel - Ερωτήσεις / Απαντήσεις 22 09-03-12 17:08
[Excel07] Πώς μπορώ να χρησιμοποιήσω στήλες διαφορετικών διαστάσεων mtheristis Excel - Ερωτήσεις / Απαντήσεις 11 11-08-11 19:41
Πώς μπορώ να θέσω νέο θέμα LEFTERIS Off topic - Εκτός θέματος 1 11-05-11 17:47
[VBA] Login_SplashScreen σε excel πως μπορώ να το κάνω? fotis Excel - Ερωτήσεις / Απαντήσεις 2 10-05-10 21:44


Η ώρα είναι 11:59.