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/5468-entopismos-leksis-basei-sygkekrimenoy-mikoys.html)

ggreg75 21-02-20 15:26

Εντοπισμός λέξης βάσει συγκεκριμένου μήκους
 
Καλησπέρα σε όλη την ομάδα!

Θα ήθελα την βοήθειά σας για το εξής θέμα.

Μέσω ενός ερωτήματος θέλω να απομονώνω μία λέξη με 36 χαρακτήρες (γραμμάτων και αριθμών) που περιέχεται σε ένα πεδίο Text με format "Υπόμνημα" και να εμφανίζεται αυτή η λέξη σε ένα διαφορετικό πεδίο.

Ουσιαστικά πρόκειται για ένα ID που μπορεί να έχει καταχωρηθεί, στην αρχή, στο τέλος του ή σε οποιοδήποτε σημείο κειμένου.

Επειδή δεν υπάρχουν άλλες λέξεις με 36 χαρακτήρες, ο εντοπισμός το κάνει πιο εύκολο.

Υπάρχει κάποιος που θα μπορούσε να με βοηθήσει;

Ευχαριστώ εκ των προτέρων

Γρηγόρης

Tasos 24-02-20 10:52

Καλημέρα σε όλους!

Έχουμε έναν πίνακα με το όνομα "tbl1" με τα πεδία:

ID (αναγνωριστικό)

και

MemoString (Μεγάλο κείμενο)

Ο κώδικας SQL σε ερώτημα που θα σου επιστρέψει όσες εγγραφές περιέχουν λέξεις μήκους 36 χαρακτήρων μπορεί να είναι ο εξής:

Κώδικας:

SELECT tbl1.ID, ' ' & [MemoString] & ' ' AS MyText
FROM tbl1
WHERE (((' ' & [MemoString] & ' ') Like "* " & String$(36,"?") & " *"));

Τα κριτήρια μπορούν να χρησιμοποιηθούν και σε άλλες συναρτήσεις (DLOOKUP() κλπ.)

Για να εμφανίσουμε μόνο το τμήμα των 36 χαρακτήρων τροποποιούμε τον κώδικα του ερωτήματος έτσι:

Κώδικας:

SELECT tbl1.ID, GetWordFromLengtn([MemoString],36) AS TheWord
FROM tbl1
WHERE (((' ' & [MemoString] & ' ') Like "* " & String$(36,"?") & " *"));

όπου η GetWordFromLengtn() είναι η συνάρτηση VBA που μας επιστρέφει τη λέξη των 36 χαρακτήρων και πρέπει να περαστεί σε μια λειτουργική μονάδα (Module)

Ο κώδικας της συνάρτησης:
Κώδικας:

Public Function GetWordFromLengtn(strWord As String, iLen As Integer) As String
    Dim VarArray() As String
    Dim i As Integer
    strWord = Replace(strWord, "  ", " ")
    VarArray = Split(strWord)
    For i = 0 To UBound(VarArray)
        If Len(Trim(VarArray(i))) = iLen Then
            GetWordFromLengtn = Trim(VarArray(i))
            Exit Function
        End If
    Next
End Function

Ελπίζω να βοήθησα.

Καλή συνέχεια!

Τάσος

ggreg75 24-02-20 15:09

Τάσο θα το δοκιμάσω και εάν έχω κάποιο πρόβλημα θα σε ενημερώσω

Σε ευχαριστώ θερμά!

Γρηγόρης

Tasos 24-02-20 15:47

Να είσαι καλά Γρηγόρη!

Δες τον (τροποποιημένο) κώδικα VBA ξανά αν θέλεις.

Έπρεπε να διορθώσω κάποια λάθη που περιείχε.

Με εκτίμηση

Τάσος

ggreg75 25-02-20 08:22

Τάσο καλημέρα,

Λειτουργεί μία χαρά!

Ευχαριστώ πολύ

Γρηγόρης

ggreg75 26-02-20 09:15

Τάσο καλημέρα,

Σε αρχείο mdb που τρέχει με Access 2003 λειτουργεί σωστά.
Σε αρχείο mdb ή accdb που τρέχει με Access 2013, o κώδικας λειτουργεί σωστά εάν οι λέξεις μήκους 36 χαρακτήρων βρίσκονται στους πρώτους 255 χαρακτήρες.

Εάν το MemoString περιέχει περισσότερους χαρακτήρες δεν μου εντοπίζει την λέξη αυτή,

Θα μπορούσες να το ξαναδείς;

Ευχαριστώ εκ των προτέρων

Γρηγόρης

Tasos 26-02-20 10:15

1 Συνημμένο(α)
Καλημέρα Γρηγόρη!

Θα σου πω τι σκέφτομαι με την ελπίδα ότι θα βοηθήσω.

1. Δεν μπόρεσα να αναπαραγάγω το πρόβλημα σου

2. Με τον κώδικα VBA που χρησιμοποιείται δεν υπάρχει διαφορά στη συμπεριφορά του
προγράμματος ανάμεσα σε εκδόσεις Access 2000 έως και 2019. Να είσαι σίγουρος γι' αυτό.

3. Για να εντοπιστεί το κείμενο των 36 χαρακτήρων, προϋποθέτει διαστήματα στην αρχή και στο τέλος του.

4. Η συνάρτηση λειτουργεί κανονικά ακόμα και σε κείμενο με πάρα πολλές χιλιάδες χαρακτήρες.
Τι συνάρτηση ή τι ερώτημα χρησιμοποιείς που σου επιστρέφει μόνο τους πρώτους 255 χαρακτήρες από το πεδίο μεγάλου κειμένου που τους στέλνεις στη συνέχεια στη συνάρτηση στο όρισμα MemoString;

Σου επισυνάπτω ένα παραδειγματικό αρχείο σε *.accdb.

Αφού το κατεβάσεις άνοιξε το ερώτημα Qry1.

Θα δεις ότι η εγγραφή με το ID 2
που περιέχει 1441 χαρακτήρες εμφανίζεται κανονικά.

Καλή συνέχεια!

Τάσος

ggreg75 26-02-20 12:08

Τάσο καλησπέρα,

Τελικά το πρόβλημα οφείλεται σε ένα συνδεδεμένο excel σε μορφή xls που μου φέρνει μόνο τους πρώτους 255 χαρακτήρες.

Θα το έλεγξω σε αυτό το σημείο και λογικά δεν θα έχω πρόβλημα.

Ευχαριστώ

Γρηγόρης


Η ώρα είναι 14:34.

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


Search Engine Optimization by vBSEO 3.3.2