Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Αντικατάσταση αριθμού σε πλαίσιο κειμένου (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/4347-antikatastasi-arithmoi-se-plaisio-keimenoy.html)

alex 09-11-16 17:13

Αντικατάσταση αριθμού σε πλαίσιο κειμένου
 
1 Συνημμένο(α)
Καλησπέρα σε όλους τους φίλους
θέλω να κάνω μια αντικατάσταση αριθμών σε πλαίσιο κειμένου με ορισμένες προυποθέσεις:
Είτε με after update είτε με κουμπί εντολής
1)Όταν μετά από τελεία ή κενό υπάρχει ο αριθμός 0 να γίνεται αντικατάσταση σε αριθμό 8
2) όταν πριν από τελεία .κόμμα, κενό ,θαυμαστικό ,ανω κατω τελεία , ερωτηματικό υπάρχει ο αριθμός 0 να γίνεται αντικατάσταση σε αριθμό 8.
εχω κάνει με την συνάρτηση trim αλλά μου xχτυπάει
Κώδικας:

Dim s As String, EndChars As Variant, i As Long
    's = 0
    If Nz(Me.TextBox2, "") <> "" Then
        s = Trim(Me.TextBox2) & " "
        'Χαρακτήρες μετά από μία λέξη
        EndChars = Array(",", ".", ";", ":", "•", " ")
        For i = 0 To UBound(EndChars)
            s = Replace(s, "8" & EndChars(i), "0" & EndChars(i))
        Next
        Me.TextBox2 = s
    End If

End Sub


Meteora 09-11-16 20:29

1 Συνημμένο(α)
Καλησπέρα Αλέξανδρε.
Υπάρχει μια εντολή Replace που είδα ότι δουλεύει στα πεδία "υπόμνημα", οπότε έχεις την τύχη με το μέρος σου !

Νομίζω ότι θα λύσεις το πρόβλημα αρκεί να ζητήσεις αντικατάσταση των αλφαριθμητικών εκφράσεων πχ ".0" με "8" κλπ

Πιστεύω ότι μπορείς να συνεχίσεις. Αν βρεις δυσκολίες θα κάνω ό,τι μπορώ να σε βοηθήσω.

Με ιδιαίτερη εκτίμηση / Νίκος΄


Οδηγία : Αλέξανδρε, δοκίμασε γράφοντας μια replace για κάθε ιδιαίτερη περίπτωση αντικατάστασης και αφού το πετύχεις μετά συμπιέζεις τον κώδικα...

alex 09-11-16 21:56

Νίκο καλησπέρα.
η δεύτερη περίπτωση τελικά δουλεύει με όλους τους περιορισμούς.
Τώρα στην πρώτη περίπτωση θέλω να αλλάζει στην αρχή της λέξης όταν υπάρχει το (0) με αντικατάσταση το (8) , δεν θυμάμαι την σύνταξη της συνάρτησης.
Στην προηγούμενη συνάρτηση ήταν EndChars για τον τελευταίο χαρακτήρα της λέξης να γίνει αντικατάσταση ,Τώρα θέλω για τον πρώτο χαρακτήρα της λέξης.τι γράφω;

kapetang 10-11-16 13:10

Καλησπέρα

Αλέξανδρε, θα πρότεινα να δοκιμάσεις τον παρακάτω κώδικα:

Κώδικας:

Public Sub ReplaceFirstEndChar()
    'Αλλαγή 1ου και τελευταίου χαρακτήρα λέξης

    'Εδώ θα καταχωρηθούν οι πραγματικοί χαρακτήρες
    Const First As String = "0"    '1ος χαρακτήρας λέξης
    Const FirstTo As String = "8"  'χαρακτήρας αντικατάστασης 1ου χαρακτήρα
    Const Last As String = "0"      'τελευταίος χαρακτήρας λέξης
    Const LastTo As String = "8"    'χαρακτήρας αντικατάστασης τελευταίου χαρακτήρα

    Dim s As String, SeparateChars As Variant, i As Long
    s = Trim(Nz(Me.TextBox2, ""))
    If s <> "" Then
        s = " " & s & " "
        'Χαρακτήρες διαχωρισμού λέξεων
        SeparateChars = Array(",", ".", ";", ":", "·", " ")
        For i = 0 To UBound(SeparateChars)
            'αντικατάσταση 1ου χαρακτήρα
            s = Replace(s, SeparateChars(i) & First, SeparateChars(i) & FirstTo)
            'αντικατάσταση τελευταίου χαρακτήρα
            s = Replace(s, Last & SeparateChars(i), LastTo & SeparateChars(i))
        Next
        Me.TextBox2 = Trim(s)
        Me.Dirty = False
    End If
End Sub


alex 10-11-16 14:48

ΟΚ Γιώργο σε ευχαριστώ πολύ θα το δοκιμάσω το βράδυ.

alex 10-11-16 22:45

Γιώργο καλησπέρα, είσαι πρώτος δουλεύει πολύ καλά.Με βοήθησε πολύ στην τελική διόρθωση της μεταγλώττισης που έκανα.Αλλά έχω και ένα άλλο πρόβλημα.Αν μπορεί να ενσωματωθεί στην προηγούμενη Public η εξής περίπτωση

ο μπάρμπα Νώε.---> Ελληνικά
o mparmpa nje4 -----> Μεταγλωττισμένα από γραμματοσειρά Braille.

Η παύλα που υπάρχει μετά το μπάρμπα δεν υπάρχει στο πληκτρολόγιο.Αυτοί που έχουν γράψει το κείμενο δεν ξέρω από τι πληκτρολόγιο το έγραψαν ούτε μπορώ να καταλάβω τι παύλα είναι , αλλά στη μεταγλώττιση σε οποιαδήποτε γραμματοσειρά να το βάλεις δεν το μεταγλωττίζει.
.
msg : ο χαρακτήρας που δεν υπάρχει constance[–] intchar=8211
Επειδή την παύλα δεν την αναγνωρίζει η γραμματοσειρά του braille μου την μεταγλωττίζει κενό. Άρα εμφανίζει 3 κενά.Εγώ θέλω όταν υπάρχουν λέξεις με αριθμούς ή γράμματα και ανάμεσα από δύο λέξεις έχουν 3 κενά να κάνει replace το δεύτερο κενό με την παύλα [-]
Παράδειγμα:
4ος – 3ος αι. π.Χ. .--->Κανονικό κείμενο
#dos - #cos <4 p4.h4 --> Θέλω η Μεταγλώττιση να γίνεται έτσι με την κανονική παύλα

kapetang 11-11-16 09:57

Καλημέρα

Αλέξανδρε η συνάρτηση Chrw(8211) επιστρέφει το χαρακτήρα «–».

Το χαρακτήρα μπορούμε να τον καταχωρήσουμε σε έγγραφο του Word κρατώντας πατημένο το Alt και πληκτρολογώντας στην αριθμοπινακίδα 8211.

Στον κώδικα, άλλαξε τη γραμμή: Me.TextBox2 = Trim(s)

με την: Me.TextBox2 = Trim(Replace(s, Chrw(8211),"-"))

alex 11-11-16 10:49

Καλημέρα Γιώργο,
δεν το ήξερα το συγκεκριμένο στην αριθμοπινακίδα .απλά στο excel μέσα απο τα constance με μια συνάρτηση έβγαλα ότι αντιστοιχεί σε 8211.
Το ζητούμενο όμως είναι το εξής ότι εγώ δεν κάνω την μεταγλώττιση σε επεξεργαστή κειμένου που έχει μεγάλη ευχέρεια πχ word την κάνω σε πλαίσιο κειμένου Access που έχει περιορισμένες δυνατότητες.
Αλλά δεν μπορώ να χρησιμοποιήσω τον παρακάτω κώδικα διότι η μεταγλώττιση γίνεται σε γραμματοσειρά του braille και δεν αναγνωρίζει το 8211 και το βγάζει κενο.
Στον κώδικα δεν μπορώ να επέμβω βγάζει μυνημα ότι :
msg : ο χαρακτήρας που δεν υπάρχει constance[–] intchar=8211
οπότε σκέφθηκα να επέμβω στο τέλος του κειμένου που αποθηκεύεται σε πίνακα μέσα από τη φόρμα να το διορθώνει το συγκεκριμένο λάθος.
Στην ουσία γίνεται διόρθωση σε μεταγλωττισμένο κείμενο που είναι σε γραμματοσειρά Braille
Στη περίπτωση αυτή στην constance 8211 την λαμβάνει σαν κενό. Το σκεπτικό μου είναι να γίνει αντικατάσταση όπου υπάρχουν 3 κενά ανάμεσα από 2 λέξεις με μορφή είτε είναι αριθμοί είτε γράμματα να γίνει αντικατάσταση το δεύτερο κενό που θα είναι το πλήν(-), (έστω να ξεχωρίζει για παράδειγμα 4ος – 3ος αι. π.Χ.)Γιατί ένας τυφλός σύμφωνα με τη γραμματοσειρά Braille θα διαβάζει έτσι #dos #cos δηλαδή το 4ος το κενό πάλι το κενό και πάλι το κενό και μετά το 3ος .Οπότε εάν το μεσαίο κενό αντικατασταθεί με (-) που την αναγνωρίζει η γραμματοσειρά Braille θα μεταγλωττίζεται σε (-) και ο μη βλέπων θα ξεχωρίζει με παύλα το 4ος από τον 3ο αι.

kapetang 11-11-16 16:25

Καλησπέρα

Αλέξανδρε θα πρότεινα τα εξής:

1) Αντίγραψε τον παρακάτω κώδικα σε μία λειτουργική μονάδα (Module)

Κώδικας:

Public Function Replace3Blanks(s As String) As String
    Dim sumS As String, j As Long, i As Long, k As Long
   
    s = Trim(s)
    k = Len(s)
    If k > 4 Then
    j = 1
    Do While j <= k - 4
        sumS = sumS & Mid(s, j, 1)
        If Mid(s, j, 1) <> " " Then
            If Mid(s, j + 1, 3) = "  " And Mid(s, j + 4, 1) <> " " Then
                sumS = sumS & " - ": j = j + 3
            End If
        End If
        j = j + 1
    Loop
      Replace3Blanks = sumS & Right(s, k - Len(sumS))

    Else
      Replace3Blanks = s

    End If
End Function

2) Θέσε στον προηγούμενο κώδικα: Me.TextBox2 = Replace3Blanks(s)

Φιλικά/Γιώργος

ΥΓ. θα μπορούσε να χρησιμοποιηθούν για τη λύση κανονικές εκφράσεις (Regular Expressions), αλλά τις παράτησα εδώ και καιρό και με παράτησαν…

alex 11-11-16 22:17

Γιώργο καλησπέρα,
ευχαριστώ για την βοήθεια δεν έχω λόγια να σε ευχαριστήσω φίλε δουλεύει άψογα.Σχεδόν έχω τελειώσει με τις μικρο διορθώσεις .Θα κοιτάξω Σ/Κ το πρόγραμμα δοκιμάζοντας με μεγάλη λεπτομέρεια για τυχόν ανεύρεση άλλου λάθους.Όσο για τις Regular expression έχω ακούσει αλλά ούτε εγώ έχω ιδέα.

kapetang 12-11-16 08:42

Καλημέρα

Αλέξανδρε, η συνάρτηση Replace3Blanks ψάχνει 3 συνεχόμενα διαστήματα στα οποία να προηγείται και να έπεται οποιοσδήποτε (α, 1,@,!,%,:, κλπ) άλλος χαρακτήρας και ακολούθως αλλάζει το μεσαίο διάστημα σε «-».

Όπως είναι ταυτίζεται με την Replace(s, " ", " - ").

Θα μπορούσε συνεπώς να μη χρησιμοποιηθεί και στη ρουτίνα ReplaceFirstEndChar να θέσουμε:

Κώδικας:

Me.TextBox2 = Replace(Trim(s), "  ", " - ")
Έγραψα τη συνάρτηση Replace3Blanks, επειδή μπορεί να προσαρμοστεί και να αποκλείει τις αντικαταστάσεις σε κάποιες περιπτώσεις, που ο χαρακτήρας που προηγείται ή έπεται είναι κάποιος συγκεκριμένος (πχ ένας από τους «~!@#$%^&*;:<>,»).

Φιλικά/Γιώργος

ΥΓ. Οι Regular Expressions είναι καταπληκτικές στην επικύρωση δεδομένων καθώς και στην εύρεση και την αντικατάσταση μοτίβων.

alex 12-11-16 12:17

Γιώργο καλημέρα,
δοκίμασα και τις 2 περιπτώσεις είναι εντυπωσιακό. Χθές το βράδυ κοίταξα λίγο και για τις Regular Expressions να δώ πως είναι ο κώδικας , διαφορετική μορφή.
Εντόπισα και ένα λάθος ακόμη
Ο Κώδικας στο module αυτό εμφανιζει τους αριθμούς
ΠΧ 1234 4567 με μορφή #1234 #4567 προσθέτει αριθμοδείκτη
Πως μπορώ να ενσωματώσω κώδικα πανω σε αυτό το module γιατί αντιμετωπίζω πρόβλημα μόνο στη περίπτωση που είναι δεκαδικό ΠΧ 12,256 μου εμφανίζει #12,#256
Ενώ εγώ θέλω όταν υπάρχει ο χαρακτήρας κόμμα (,) ανάμεσα σε αριθμό να φαίνεται σαν ένας αριθμός ΠΧ #12,256 διότι το εκλαμβάνει σαν δεύτερο αριθμό.
Να του πούμε όταν υπάρχει ο χαρακτήρα (,)κόμμα πρίν και μετα από δύο αριθμούς χωρίς κενό να μην προσθέτει αριθμοδείκτη μετα το κόμμα(,) ΠΧ #12,256 ΚΑΙ ΟΧΙ #12,#256 ανυπήρχε ένα κενο μετα το κόμμα(,) θα ήταν της μορφής #12, #256
ΑΠΟΣΠΑΣΜΑ ΤΗΣ FUNCTION TOY MODULE
Κώδικας:

Case Else
                If IsNumeric(CURRENT_CHAR) = True Then  'EINAI ARITMOS
                    '              If i > 1 Then

                    Dim j As Long
                    Dim my_char As String
                    Dim my_temp_number As String

                    my_temp_number = ""

Dim my_num1 As Variant, my_num1_trans As Variant

my_num1 = "1234567890"
my_num1_trans = "abcdefghij"

                    For j = i To lngLen
                        my_char = Right(Left(strChars, j), 1)
                        If IsNumeric(my_char) = True Then  'EINAI ARITMOS
                        If my_char = "0" Then
                            my_temp_number = my_temp_number & Right$(my_num1_trans, 1)
                        Else
                            my_temp_number = my_temp_number & Right$(Left$(my_num1_trans, CInt(my_char)), 1)
                        End If
                       
                        Else    'telos oi aritmoi
                            Exit For
                        End If
                    Next j

                    strTemp = strTemp & "#" & my_temp_number
                    i = j

                    If i < lngLen Then GoTo next_char Else GoTo final1
                    'End If
                Else
End If
        End Select
    Next


final1:
    Transliterate1 = strTemp
End Function


kapetang 12-11-16 15:12

Καλησπέρα

Αλέξανδρε, αν αλλάξεις την προτελευταία γραμμή κώδικα σε:

Transliterate1 = replace(strTemp,",#",","), μάλλον θα λυθεί το πρόβλημα.

alex 12-11-16 16:14

1 Συνημμένο(α)
Καλησπέρα Γιώργο ,
τι να πω ρε φίλε μαγικά τα κάνεις δουλεύει τέλεια.Να σε ρωτήσω και κάτι άλλο μου βγάζει όταν αλλάζω γραμμή ότι δεν αναγνωρίζει τους χαρακτήρες (Chr13) kai Chr10).Τί είναι αυτό και πως το προσπερνάω.
του έχω βάλει μια΄γραμμή κώδικα για να μου δείχνει τι δεν μεταγλωττίζει
''Εδώ ελέγχει το σύστημα ότι βρήκε χαρακτήρα που δεν υπάρχει

MsgBox "Χαρακτηρας που δεν υπάρχει const [" & ChrW(intChar) & "] intchar=" & intChar


Επίσης αντιμετωπίζω ένα σοβαρό θέμα με τα εισαγωγικά είναι το(«)Chr8 και το (»)Chr0
με αντιγραφή επικόλληση γίνεται , όταν όμως πάω να γράψω τότε βγάζει (") τι χαρακτήρας είνα αυτός το 34;και είναι το ίδιο μπρός πίσω από τη πρόταση.Υπάρχει δυνατότητα με συνδυασμό να πληκτρολογήσω στο πλαίσιο κειμένου και να βγάζει τα κανονικά;[IMG]https://drive.google.com/file/d/0ByrxtVjC98IcdGx6cVNYRmNBSDA/view?usp=sharing

kapetang 12-11-16 17:33

1) Όταν αλλάζει γραμμή, στο τέλος της, προστίθενται οι χαρακτήρες Chr(13) και Chr(10).

Στη VBA για το συνδυασμό αυτών των χαρακτήρων χρησιμοποιούνται οι σταθερές vbCRLF ή vbNewLine.

Αν σε ένα MsgBox βάλουμε το κείμενο "Θα διαγραφούν εγγραφές" & vbCRLF & "Θα συνεχίσεις;", θα εμφανίζεται σε 2 γραμμές.

2) Ο κωδικός για τα εισαγωγικά « είναι 0171 και για τα » 0187.

Στον κώδικα τα παίρνουμε με τις συναρτήσεις Chrw(0171) και Chrw(0187).

Με πατημένο το Alt πληκτρολογώντας τον κωδικό στην αριθμοπινακίδα μπορούμε να τα πάρουμε και σε πλαίσιο κειμένου.

3) Η συνάρτηση Chr(34) μας δίνει τα διπλά κοινά εισαγωγικά.

Δεν έχω ασχοληθεί ιδιαίτερα με θέμα γι' αυτό και δε μπορώ να βοηθήσω περισσότερο.

alex 12-11-16 18:02

Γιώργο σε ευχαριστώ πολύ για όλα και όλες τις πληροφορίες.
Το πάντρεμα και ο συνδυασμός μεταξύ του κώδικα του Braille και του κώδικα της VBA είναι πολύ δύσκολο πράγμα παιδεύομαι 3 χρόνια τώρα. Προυποθέτει πολύ καλή γνώση και των δύο αντικειμένων σε συνδυασμό δύο γραμματοσειρών που πολύ πιθανόν να υπάρχουν και λάθη στις γραμματοσειρές ή να μην ταιριάζουν.Τότε πάμε στο τελικό για αντικατάσταση αν και πολλές φορές από τις πολλές διορθώσεις ο κώδικας τα φτύνει και δε χωράει άλλες επεμβάσεις.


Η ώρα είναι 02:58.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2