पैटर्न के बिना एक स्ट्रिंग से तारीख निकालना


1

मैंने हाल ही में एक एक्सेल शीट पर काम करना शुरू किया है जो ऑरेकल डेटाबेस पर पोस्ट किए गए विवरण के स्ट्रिंग पर निर्भर है।

स्ट्रिंग कुछ इस तरह से जाती है

पार्किंग के लिए 18-8-1438 से 17-8-1439 / 15-5-17 से 4-5-18 की अवधि के लिए 1 वर्ष का किराया शुल्क

01-08-1438 से 01-02-1439 / 28-04-2017 से 21-10-2017 तक स्ट्रीट के लिए 6 महीने का किराया शुल्क

310113 के लिए 1 वर्ष का किराया शुल्क - 01-01-1438 से 30-12-1438 की अवधि के लिए आउटलेट

और कोई अन्य रूप जिसे विवरण पोस्ट करने वाला व्यक्ति सहज महसूस करता है।

अब मेरा सवाल यह है कि मैं एक्सेल फ़ंक्शन या vba मैक्रो के माध्यम से आसानी से इन विवरणों से तारीखें कैसे निकालूं। बोनस एक वेब सेवा के माध्यम से उन लोगों को परिवर्तित करने के बजाय मक्खी पर हिजरी तारीखों को ग्रेगोरियन में परिवर्तित करने में सक्षम होगा।

संपादित करें: वांछित आउटपुट (धन्यवाद मेट जुहाज़) का उल्लेख करना भूल गए, आउटपुट को कुछ ऐसा होना चाहिए जो कि दिनों के सूत्र जैसे मिमी / डीडी / yyyy में उपयोग किया जा सके। प्रत्येक प्रविष्टि में ज्यादातर 2 तारीखें होंगी, अनुबंध की शुरुआत की तारीख और अनुबंध की अंतिम तिथि, समान होने की संभावना के साथ-साथ हिजरी और शायद ही केवल हिजरी तारीख के साथ पोस्ट किया जाएगा। हमेशा dd / mm / yyyy या dd / mm / yy की जांच करें क्योंकि यह उनका सामान्य पोस्टिंग प्रारूप है।


1
कृपया अपना वांछित आउटपुट भी निर्दिष्ट करें। (जैसे आपके लिए 14xx वैध वर्ष हैं? आप पहले इनपुट से किन तिथियों को वैध मानते हैं? क्या आपके पास प्रत्येक प्रविष्टि में 2 तिथियाँ हैं, या क्या यह कई हो सकती हैं?) क्या आप हमेशा dd / mm / yyyy की जाँच करना चाहते हैं, या करना चाहते हैं चेक मिमी / dd / yyyy यदि कोई पिछले विफल हो जाता है? ...
Máté Juhász

जवाबों:


0

1. खजूर निकालें

मैं उपयोग करता हूं RegEx ढूँढें / बदलें ऐड-इन ऐसे मामलों में, जो एक्सेल में नियमित अभिव्यक्ति कार्यक्षमता जोड़ता है।

आप इसे सरणी सूत्र के रूप में भी उपयोग कर सकते हैं:

  • जैसा कि आप प्रति सेल अधिकतम चार तारीखों की अपेक्षा करते हैं, एक पंक्ति में चार कोशिकाओं का चयन करें (उदाहरण के लिए B3: E3 उदाहरण में)
  • फार्मूला:
    =RegExFind(A3,"\d+-\d+-\d+")
  • CTRL + Shift + Enter दबाएं
  • फॉर्मूला कॉपी करें

यह सभी तिथियों को 1/2 अंकों के दिन / महीने और 2/4 अंकों के वर्ष के रूप में दर्ज करेगा, भागों को एक ही द्वारा अलग किया जाता है -

2. निकाले गए ग्रंथों को तिथियों में परिवर्तित करें

मैंने जिन उदाहरणों का उपयोग किया है DATEVALUE फ़ंक्शन, जो केवल ग्रेगोरियन कैलेंडर के लिए काम करता है, मुझे हिजरी के साथ अनुभव नहीं है।

enter image description here


धन्यवाद इस तारीख को निकालने में अच्छी तरह से काम किया। मुझे निकाली गई तारीखों पर डेटवल्यू फ़ंक्शन का उपयोग करने में #value त्रुटि मिल रही है, इसके लिए कोई संभावित कारण?
Herubrand

DATEVALUE दिनांक बदलने के लिए क्षेत्रीय सेटिंग्स का उपयोग करता है, आपको उन्हें बदलने की आवश्यकता हो सकती है।
Máté Juhász

वह काम किया। मेरे काम को मानकीकृत करने में आपकी मदद अमूल्य थी, बहुत बहुत धन्यवाद।
Herubrand

1

यहाँ रेगेक्स के बिना VBA का उपयोग कर एक समाधान है:

Sub GetDateCandidates()
    Dim i As Long, N As Long, s As String
    Dim K As Long, a, bry

    K = 2
    N = Cells(Rows.Count, "A").End(xlUp).Row

    For i = 1 To N
        s = Cells(i, 1).Value
        ary = Split(s, " ")
        For Each a In ary
            bry = Split(a, "-")
            If UBound(bry) = 2 Then
                If (TestBry(bry)) Then
                    Cells(i, K).Value = "'" & a
                    K = K + 1
                End If
            End If
        Next a
        K = 2
    Next i
End Sub

Public Function TestBry(b) As Boolean

    TestBry = False

    If Not IsNumeric(b(0)) Then Exit Function
    If Not IsNumeric(b(1)) Then Exit Function
    If Not IsNumeric(b(2)) Then Exit Function
    If Len(b(0)) > 2 Then Exit Function
    If Len(b(1)) > 2 Then Exit Function
    If Len(b(2)) = 2 Or Len(b(2)) = 4 Then TestBry = True
End Function

वाक्यांश कॉलम में हैं । प्रत्येक वाक्यांश को विभाजक के रूप में रिक्त स्थान का उपयोग करते हुए शब्दों में अलग किया जाता है। प्रत्येक शब्द को आइटम का उपयोग करके अलग किया जाता है पानी का छींटा एक विभाजक के रूप में। अगर:

  1. तीन आइटम हैं
  2. सभी तीन आइटम संख्यात्मक हैं
  3. पहले दो वस्तुओं की लंबाई या तो है 1 या 2
  4. तीसरे आइटम की लंबाई या तो है 2 या 4

यह शब्द वाक्यांश के आगे संग्रहीत है:

enter image description here


मैं इस आदेश को स्तंभ से दिनांक लाने के लिए कैसे आमंत्रित करूं?
Herubrand

0

आपके द्वारा दिए गए उदाहरणों में, यह एक पैटर्न का पालन करता है।

पैटर्न है: कम से कम एक अंक, उसके बाद एक प्रतीक या तो एक डैश या एक स्लैश। (x2) और 2 या 4 अंकों में समाप्त होता है। और वे सभी एक ही पंक्ति में हैं।

तो आप इस तरह के पैटर्न से मेल खाते सभी परिणामों को वापस करने के लिए regex का उपयोग कर सकते हैं। मेरा रेगीक्स थोड़ा कठोर है, लेकिन पैटर्न कुछ इस तरह होगा:

\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}

यह उदाहरण के लिए DD / MM / YYYY प्रारूप के साथ-साथ D-M-YY प्रारूप और क्रमपरिवर्तन के लिए मेल खाता है।

यदि आप पार्स करना चाहते हैं से दिनांक स्वरूप, आप इस खोज स्ट्रिंग का उपयोग कर सकते हैं:

\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}\s*to\s*\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}

बेशक, आपको इसे रेगेक्स इंजन के माध्यम से चलाने और आउटपुट की कटाई करने की आवश्यकता होगी।

फिर आप उक्त आउटपुट को मानकीकृत करना चाह सकते हैं ताकि यह सब मेल खाता हो डीडी / MM / YYYY प्रारूप - हालांकि मुझे कहना है कि मुझे पसंद है YYYY-MM-DD कंप्यूटर कैसे खोजों के लिए चीजों को अनुक्रमित करता है। आप इसे रेगेक्स के साथ भी कर सकते हैं, संख्याओं को समूहीकृत करके और उन्हें खोज और प्रतिस्थापन के साथ पुनर्गठित करते हुए। मुझे पता है कि अगर आप की कोशिश करने के लिए उत्सुक कुछ ऐसा लगता है।

अंत में, आप मानकीकृत आउटपुट को ग्रेगोरियन कैलेंडर में बदलना चाहते हैं। यदि आप एक्सेल फार्मूला होने पर गणना करते हैं, तो वर्ष के लिए मान 1900 या कुछ से कम है।

शुभकामनाएँ। इस तरह के डेटा का मानकीकरण एक बुरा सपना हो सकता है, हालाँकि स्क्रिप्ट और रेगेक्स काफी मदद करते हैं।


मैं इसे आज़माना चाहता हूं। मुझे पता है कि प्रक्रिया में अगला कदम क्या है।
Herubrand

@Herubrand जल्द जवाब न देने के लिए क्षमा करें। एहसास नहीं था कि किसी ने इसके बारे में पूछताछ की थी। इसे करने का तरीका इस प्रकार है: यदि आपके पास 12/04/2017 है जो कि विशिष्ट अमेरिकी है। आप एक खोज कर सकते हैं & amp; बदलें, जहाँ आप पैटर्न खोजते हैं: (\d{1,2})\/(\d{1,2})\/(\d{2,4}) और इसे पैटर्न के साथ बदलें \3-\1-\2 तो बस एक & amp खोजें; सबको बदली करें। अंत में, यदि वर्ष 2000 के बाद के सभी उदाहरण हैं, और वे केवल 2 अंकों के वर्ष के फार्मूले का उपयोग करते हैं, तो आप इसके लिए एक खोज कर सकते हैं (\d\d)[\s|$] और इसके साथ बदलें \/20\1 यह काम मुझे सोचना चाहिए।
Christian
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.