[AccessD] Extract data from Single field

Stuart McLachlan stuart at lexacorp.com.pg
Wed Jun 7 23:04:26 CDT 2017


I'd go with a slight variation to that (I have variants :-) )

Complete code including a test sub:

Option Compare Database
Option Explicit

Dim AllData() As String 

Sub ParseData(strData As String)
Dim recs() As String
Dim ARecord() As String
Dim x As Long
Dim y As Long

'Get records into local Array
recs() = Split(strData, ";")

'Get fields into Global Array
ReDim AllData(UBound(recs()), 4)
For x = 0 To UBound(recs())
  ARecord() = Split(recs(x), ":")
 If UBound(ARecord()) > -1 Then 'Deal with possible trailing ";" in string
    For y = 0 To 4
        AllData(x, y) = ARecord(y)
    Next
  End If
Next
End Sub

Sub Test()
Dim x, y As Long
ParseData "[TransactionDate1]:[Merchant1]:[Amount1]:[ARN1]:[Note1];[TransactionDate2]:[ 
Merchant2]:[Amount2]:[ARN2]:[Note2];"
For x = 0 To UBound(AllData())
    For y = 0 To 4
       Debug.Print AllData(x, y),
    Next
       Debug.Print
Next

End Sub



On 8 Jun 2017 at 13:00, David Emerson wrote:

> Thanks Jack, worth considering. 
> 
> -----Original Message-----
> From: AccessD [mailto:accessd-bounces at databaseadvisors.com] On Behalf
> Of jack drawbridge Sent: Thursday, 8 June 2017 12:14 p.m. To: Access
> Developers discussion and problem solving Subject: Re: [AccessD]
> Extract data from Single field
> 
> David,
> 
> Not sure what you need, but here is an approach (if I understand the
> requirement) that may be useful.
> 
> Sub david()
>     Dim x As String
>     Dim i As Integer, j As Integer
>     Dim rec As Variant  'terminated with ;
>     Dim fld As Variant  'terminated with :
> 
>     'put the data template into a string
>     x =
> "[TransactionDate1]:[Merchant1]:[Amount1]:[ARN1]:[Note1];[TransactionD
> ate2]: [Merchant2]:[Amount2]:[ARN2]:[Note2];"
>     rec = Split(x, ";")
>     ' act on the rec array
>     For i = LBound(rec) To UBound(rec)
>         fld = Split(rec(i), ":")
>         For j = LBound(fld) To UBound(fld)
>             Debug.Print "record (" & i & " , field " & j; ") is " &
>             fld(j)
>         Next j
>     Next i
> End Sub
> 
> result is
> 
> record (0 , field 0) is [TransactionDate1] record (0 , field 1) is
> [Merchant1] record (0 , field 2) is [Amount1] record (0 , field 3) is
> [ARN1] record (0 , field 4) is [Note1] record (1 , field 0) is
> [TransactionDate2] record (1 , field 1) is [Merchant2] record (1 ,
> field 2) is [Amount2] record (1 , field 3) is [ARN2] record (1 , field
> 4) is [Note2]
> 
> Good luck.
> 
> On Wed, Jun 7, 2017 at 7:31 PM, David Emerson <newsgrps at dalyn.co.nz>
> wrote:
> 
> > Hi Bill,
> >
> > I think the data will not actually include the open and close
> > brackets so that shouldn't be a problem.
> >
> > Since the notes are the last field I just need to deal with ;
> >
> > Here is what I came up with so far (since there are so few fields
> > and some are numbers, some are text, I didn't try to loop individual
> > fields)
> >
> >             strTransactions = rstDispute!MergedTransactions
> >             Do While Len(strTransactions) > 1
> >                 strSQL = "INSERT INTO dbo.DisputeTransaction 
> > (TransactionDate, TransactionMerchant, TransactionAmount, 
> > TransactionARN, TransactionNotes ) "
> >                 strSQL = strSQL & "VALUES ("'"
> >                 strSQL = strSQL & 
> > basConvertDate(Left$(strTransactions,
> > InStr(strTransactions, ":") - 1)) & "','" 'TransactionDate
> >                 strTransactions = Right$(strTransactions,
> > Len(strTransactions) - InStr(strTransactions, ":"))
> >                 strSQL = strSQL & Left$(strTransactions, 
> > InStr(strTransactions, ":") - 1) & "'," 'TransactionMerchant
> >                 strTransactions = Right$(strTransactions,
> > Len(strTransactions) - InStr(strTransactions, ":"))
> >                 strSQL = strSQL & Left$(strTransactions, 
> > InStr(strTransactions, ":") - 1) & ",'" 'TransactionAmount
> >                 strTransactions = Right$(strTransactions,
> > Len(strTransactions) - InStr(strTransactions, ":"))
> >                 strSQL = strSQL & Left$(strTransactions, 
> > InStr(strTransactions, ":") - 1) & "','" 'TransactionARN
> >                 strTransactions = Right$(strTransactions,
> > Len(strTransactions) - InStr(strTransactions, ":"))
> >                 strSQL = strSQL & Left$(strTransactions, 
> > InStr(strTransactions, ";") - 1) & "'," 'TransactionNotes
> >                 strTransactions = Right$(strTransactions,
> > Len(strTransactions) - InStr(strTransactions, ";"))
> >                 Set cmd = basGetCommand(strSQL, adCmdText)
> >                 cmd.Execute
> >                 Set cmd = Nothing
> >             Loop
> >
> > Regards
> >
> > David
> >
> > -----Original Message-----
> > From: AccessD [mailto:accessd-bounces at databaseadvisors.com] On
> > Behalf Of Bill Benson Sent: Thursday, 8 June 2017 10:59 a.m. To:
> > Access Developers discussion and problem solving Subject: Re:
> > [AccessD] Extract data from Single field
> >
> > What will you do if the Notes contain character like [ or ] or ; or
> > :
> >
> > ?
> >
> > What mind of delimiter can be counted on with data like that?
> >
> > Hi Listers,
> >
> > I have some data that is currently stored in a single field in the
> > following format:
> >
> > [TransactionDate1]:[Merchant1]:[Amount1]:[ARN1]:[Note1];[
> > TransactionDate2]:[
> > Merchant2]:[Amount2]:[ARN2]:[Note2];etc
> >
> > The ";" separates records and the ":" separates the data within a
> > record.
> >
> > Before I start reinventing the wheel, does anyone have a code
> > snippet that will extract the fields?
> >
> > Regards
> > David Emerson
> > Dalyn Software Ltd
> > Wellington, New Zealand
> >
> >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 




More information about the AccessD mailing list