I have a question that could be easy or not.
I will explain further: I have a string like this:
str = "TR~Maintenance~fas plus-maintenicon|GR~Supplies~fas minus-suppicon|JK~Affidavit~fas minus-affiicon"
Now, my objective is to put those in an array separately like:
TR
Maintenance
fas plus-maintenicon
GR
Supplies
fas minus-suppicon
JK
Affidavit
fas minus-affiicon
and then reshape and redim the array to keep only, let's say, the strings starting with fas....
What is the easiest method? Spliting? regEx? inStr?
I have the following code:
Function funcSeparaLista(objLst)
arrVLst = split(objLst, "~")
for each x in arrVLst
VLst = VLst&x&"<br/>"
next
funcSeparaLista = split(VLst, "|")
end function
t = funcSeparaLista(str)
But retrieving the data using:
response.write(t(0))
response.write(t(1))
response.write(t(2))
response.write(t(3))
I get undesired results:
TR
Maintenance
fas plus-mainteniconGR
Supplies
fas minus-suppiconJK
Affidavit
fas minus-affiicon
One thing most important: I want my FUNCTION only to deal with putting the detached string in arrays and dealing with it after in another portion of code.
After the array hold everything like I want it, I want only the array to keep this data:
fas plus-maintenicon
fas minus-suppicon
fas minus-affiicon
What I am doing wrong? Remember please. This is vbscript, not VB.Net. Thanks in advance I think this could be very easy but I am not quite trying to accomplish it after some hours redoing and checking code.
This is a serialised string where the record delimiter is |
and the field delimiter is ~
. You can easily build a 2-Dimensional Array from this using a double loop.
Dim str: str = "TR~Maintenance~fas plus-maintenicon|GR~Supplies~fas minus-suppicon|JK~Affidavit~fas minus-affiicon"
Dim data: data = ConvertToArray(str, "|", "~")
WScript.Echo data(1, 2)
Function ConvertToArray(value, record_delim, field_delim)
Dim data()
If Len(value) < 1 Then ConvertToArray = Empty
Dim records: records = Split(value, record_delim)
If Not IsArray(records) Then ConvertToArray = Empty
Dim rows: rows = UBound(records)
Dim row, col
For row = 0 To rows
Dim fields: fields = Split(records(row), field_delim)
If Not IsArray(fields) Then ConvertToArray = Empty
Dim cols: cols = UBound(fields)
ReDim Preserve data(cols, row)
For col = 0 To cols
data(col, row) = fields(col)
Next
Next
ConvertToArray = data
End Function
Output:
Affidavit
Using this function you can get the output you require by looping through and returning just the 3rd column from each row.
Dim data: data = ConvertToArray(str, "|", "~")
If IsArray(data) Then
Dim row
Dim rows: rows = UBound(data, 2)
For row = 0 To rows
WScript.Echo data(2, row)
Next
End If
Output:
fas plus-maintenicon
fas minus-suppicon
fas minus-affiicon