concatenate string in for windows command - for-loop

I want to concatenate to a string in a for command but in every iteration it doesn't update the str as I would want it to do.
the code is:
set x=0
for %G in (1,2,3) Do set x=%x%1
the value I would like x to get is: 0111.
the value accepted is: 01

I made a batch file to test this out and I got 0111 as you expected
here is the batch contents:
Setlocal EnableDelayedExpansion
set x=0
for %%G in (1,2,3) Do set x=!x!1
echo !x!
pause

Related

Batch for loop find string in variable

I want to find the string A in the variable Code=AAABASDG
and count each time 1 up if "A" was found so the result should be that it outputs 4 because in Code variable there are 4 A's
Example Code :
#echo off
set /A C=0
set Code=AAABASDG
for %%i in (%Code%) do IF "%%i"=="A" set /A C=%C%+1
echo %C%
pause
You could get the length of original string A, then delete the "A" letters from the string and get the length of the result, to finally subtract both lengths.
To easily get the length of the string, you could store it in a file and then ask for the %%~Z size of the file. Here it is:
#echo off
setlocal
set "Code=AAABASDG"
> before.txt echo %code%
> after.txt echo %code:A=%
for %%b in (before.txt) do for %%a in (after.txt) do set /A "count=%%~Zb-%%~Za"
echo %count%
The only drawback of this method is that it is not case-aware: both upcase and lowcase letters are delete in the replacement operation
#echo off
set /A C=0
set "Code=AAABASDG"
:loop
if defined code (
if "%code:~-1%"=="A" set /a C+=1
set "code=%code:~0,-1%"
goto loop
)
echo %C%
Use set "var=value" for setting string values - this avoids problems caused by trailing spaces. Don't assign " or a terminal backslash or Space. Build pathnames from the elements - counterintuitively, it is likely to make the process easier.
Substrings in batch are obtained from %var:~m,n% where ,n is optional; m is count-of-chars-from-beginning-of-string, from end if negative. ,n positive = max length to return; negative = end-position in chars from end; missing=return all after m
Here's a quick example which gets help from PowerShell:
#Echo Off
SetLocal EnableExtensions
Set "Code=AAABASDG"
For /F %%G In ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
-NoProfile "[RegEx]::Matches('%Code%','A').Count"') Do Set "C=%%G"
Echo(%C%
Pause

Win Batch nested for returns "unexpected" error

Win10, CMD.
Working on a long, complicated script, and hit a part that just does not want to cooperate. Here's a snippet that illustrates the problem:
set TESTSTR="abc def ghi jkl mno pqr stu vwx yz"
for /l %%a in (1,1,9) do (
set I=%%a
for /f "tokens=!I!" %%b in ("%TESTSTR%") do echo %%b
)
The expected result would be
abc
def
ghi
jkl
mno
pqr
stu
vwx
yz
But I just get 9x of this:
!I!" was unexpected at this time.
I've tried multiple variants of this, including set VAR="tokens=%%a" - for /f !VAR! ... I've stuck various echos in there and found that the variable %%a is incrementing properly and any intermediate vars I try to use are being set correctly.
It just doesn't seem to be able to use a delayed expansion or loop variable in the options section of another loop. I've done similar pre-loop options definitions and they normally work just fine, but never tried it in nested for's, using the outside loop's variable as a parameter for the inside loop like this.
Example: this code snippet works, showing only directories named "Update??" in the current dir (yes, I know that's way more than would be needed, I just grabbed it and repurposed it for this demo - the original code had a set rather than echo, with the intent of grabbing the most recent directory):
set FORPARM="usebackq tokens=1"
for /f %FORPARM% %%f in (`dir /b /a:d /o:d Update??`) do echo %%f
This example is not inside a for or other situation that would require delayed expansion, which I think is causing issues with the problem code above - the for command just doesn't seem to be able to handle delayed expansion or for variables as part of its command.
I suppose I could do it with call, putting the first for's var as a parameter to the call, and the call has the inner for, but would prefer not to - the routine I pulled this from is complex enough already - it reads a data file and populates multiple arrays. I have a variant of that routine that works, but it's pretty kludgey & requires editing when the number of arrays changes in the data file. I'm trying to speed it up, make it neater, and not require code alteration when the data alters.
Anyone else ever seen and gotten past this one?
You were very close with your code.
The inner for-loop needs the updated value from the outer for-loop in it's for parameter.
This can be done by moving the inner for-loop to a subroutine and call this subroutine.
In the code below I have changed the inner for-loop to a single-line subroutine.
This keeps the code very close to yours.
#echo off
set TESTSTR="abc def ghi jkl mno pqr stu vwx yz"
for /l %%a in (1,1,9) do (
cmd/c "#echo off&for /f "tokens=%%a" %%b in (%TESTSTR%) do echo %%b"
)
I don't really consider this THE answer, but it is AN answer, based on what I was trying to avoid (and #OJBakker's answer). Putting this here instead of a comment because the comment just munges the code sections - I probably just don't know what I'm doing there yet...)
With the code as:
:nested_for_test
set TESTSTR=abc def ghi jkl mno pqr stu vwx yz
for /l %%a in (1,1,9) do (
call :nested_for_test_inner %%a
)
exit /b
:nested_for_test_inner
for /f "tokens=%1" %%b in ("%TESTSTR%") do (
echo %%b
)
exit /b
Yes, I know the "do" sections do not need to be parenthecated - they are that way because the "real" code has a lot more than just a single line in each do...
The results are as expected:
Start: 8:28:05.98
abc
def
ghi
jkl
mno
pqr
stu
vwx
yz
Start: 8:28:05.98
Stop: 8:28:07.76
Elapsed: 1.78 seconds
Yes, I have a timer routine in my test file. This shows slower than I'd hoped, but within reason, considering the extra call.
If someone figures out how to do it without that call, please add!
Okay... To clarify the issue. Here's the original "kludgey" code - actual code, not a simplified illustrative sample (I left my comments to explain what it's doing):
:: 'call :array_load pathname [arry:val]'
:: INPUT - 1-2 parameters: datafile path and optional condition
:: RESULT - sets up arrays & UBOUNDs (array[0])
:: Read a datafile (identified in the first parameter). This file has an array
:: definition line and a number of data lines. The array definition line starts
:: with 'arry ' and lists the arrays to be populated from the data statements.
:: Data statements list the information to be put into the arrays, in the same
:: order as the arrays listed in the arry statement.
:: An optional second parameter causes only lines that have the value given for
:: that array to be included (ex: 'ZIP:23456' causes only addresses in zipcode
:: 23456 to be read).
:: The arry statement can be anywhere in the file. The data statements are read
:: in the order of appearance.
:: The Upper boundary (UBOUND) is stored in [0]
:array_load
set _DATAFILE=%1
set _COND=%2
if not exist %_DATAFILE% (
echo [E] - {array_load} Array datafile %1 not found. Aborting run.
pause
exit
)
:: Detect and set up for use of the second parameter.
if defined _COND for /f "tokens=1-2 delims=:" %%a in ("%_COND%") do (set _ARY=%%a&set _VAL=%%b)
:: Gets the list of arrays from the "arry" statement
for /f "usebackq tokens=1,*" %%a in (`findstr "^arry " %_DATAFILE%`) do ( set "ARRAYLIST=%%b")
:: Set up the array names and prep for the second loop. The "tokens" var sets
:: up to read the columns in the data statements. Token 1 is always "data" and
:: is skipped.
set ndx=1
for %%a in (%ARRAYLIST%) do (
set COL!ndx!=%%a
set /a ndx+=1
)
:: "TOKENS" is not a mathematical calculation - it is a range definition used
:: in the next FOR statement. Do not add /a to the set!
set TOKENS=2-%ndx%
set /a ARYCOUNT=ndx-1
:: Read the data statements into the arrays. The "if defined" increments the
:: index for the next read only if there is no condition or the condition is
:: met. The "for" inside this "if" exists because the condition can't be tested
:: without it.
set ndx=1
for /f "usebackq tokens=%TOKENS%" %%a in (`findstr "^data " %_DATAFILE%`) do (
set !COL1![!ndx!]=%%a
if %ARYCOUNT% GEQ 2 set !COL2![!ndx!]=%%b
if %ARYCOUNT% GEQ 3 set !COL3![!ndx!]=%%c
if %ARYCOUNT% GEQ 4 set !COL4![!ndx!]=%%d
if %ARYCOUNT% GEQ 5 set !COL5![!ndx!]=%%e
if %ARYCOUNT% GEQ 6 set !COL6![!ndx!]=%%f
if %ARYCOUNT% GEQ 7 set !COL7![!ndx!]=%%g
if defined _COND (
for /f "usebackq" %%x in (`echo %_ARY%[!ndx!]`) do set RES=!%%x!
if !RES!==%_VAL% set /a ndx+=1
) else (
set /a ndx+=1
)
set /a !COL1![0]=!ndx!-1
if %ARYCOUNT% GEQ 2 set /a !COL2![0]=!ndx!-1
if %ARYCOUNT% GEQ 3 set /a !COL3![0]=!ndx!-1
if %ARYCOUNT% GEQ 4 set /a !COL4![0]=!ndx!-1
if %ARYCOUNT% GEQ 5 set /a !COL5![0]=!ndx!-1
if %ARYCOUNT% GEQ 6 set /a !COL6![0]=!ndx!-1
if %ARYCOUNT% GEQ 7 set /a !COL7![0]=!ndx!-1
)
exit /b
This routine loads a set of index-correlated arrays. Here's an example data file. I left the comments in the file to help explain what's going on. Only the "arry" and "data" lines are actually used by the routine.
To be REFERENCED by :array_load function
The line starting with "arry " contains the names of the arrays to be
filled from the data provided. Columns do not need to line up; extra spaces
are ignored. There is a maximum of six arrays without revisiting the
:array_load functions. ANY change of the "arry" names requires revisiting
the code that uses them!
All Data lines must begin with "data ", and NO other lines can start that
way! The keywords "data" and "arry" are case-sensitive and must be followed
by a space.
All lines that do NOT start with "arry " or "data " are comments.
arry FIRST LAST PHONE ZIP
data Joe Wilson 202-417-2742 20122
data John Doe 209-659-2482 10523
data Susan Doe 209-659-2482 10523
data Bill Johnson 619-384-2582 53737
data Cindy Wahler 301-724-7496 20933
data Rebecca Tannis 410-473-2748 20536
This will result in FIRST[0]=6, FIRST[1]=Joe, LAST[0]=6, LAST[1]=Wilson, etc
on up to FIRST[6]=Rebecca ... ZIP[6]=20536 (all the [0]'s = 6, as the array size)
The code above works (and is reasonably fast), unless the last line is excluded by the condition check, in which case the last line is not actually excluded. It also must be edited if the number of arrays exceed the number of if ... geq .. %%... statements.
I'd like to: 1) fix the last line exclusion bug, 2) remove the many IFs for array count flexibility, 3) make it faster.
This is what I'm tinkering with now. It does #2, I expect it to do #1 when I get that part worked out, but it fails miserably on #3 - FAR slower. On this computer, it takes 20-30 seconds to process this list of just 6 values for only 4 arrays - my actual data files are about 110 lines with 7 values each and 21 lines of 5 each.
:array_load
set _DATAFILE=%1
set _FILTER=
if not exist %_DATAFILE% (
echo [E] - {array_load} Array datafile %1 not found. Aborting run.
pause
exit /b
)
if not "%2"=="" set _FILTER=%2
:: Gets the list of arrays from the "arry" statement
for /f "usebackq tokens=1,*" %%a in (`findstr "^arry " %_DATAFILE%`) do ( set "ARRAYLIST=%%b")
:: Set up the array names and prep for the second loop.
set ndx=1
for %%a in (%ARRAYLIST%) do (
set COL[!ndx!]=%%a
set /a ndx+=1
)
set /a ARYCNT=ndx-=1
:: Token 1 is always "data" and is skipped.
set ndx=1
for /f "usebackq tokens=1,*" %%a in (`findstr "^data " %_DATAFILE%`) do (
set _LN=%%b
for /l %%x in (1,1,%ARYCNT%) do (
set ARY=!COL[%%x]!
call :array_load_inner %%x
)
set /a ndx+=1
)
exit /b
:array_load_inner
for /f "tokens=%1" %%z in ("!_LN!") do set !ARY![!ndx!]=%%z
set /a !ARY![0]=!ndx!
exit /b
So, does this make your eyes cross as it does mine? :)
Either routine above is an "answer", just not the one I'm after - the first is my starting point, and works to the extent of the original question, which did not include references to arrays or inclusions. The second is far too slow to be viable. #Stephan answer would work if I weren't dealing with arrays. Apologies for putting this material into an "Answer" block - it's far too large for a comment (I guess I should have included original full code from the beginning, rather than try to keep the sample code at the "smallest common denominator", so to speak). Sorry...
EDIT completely changed due to new information.
Please try this new code. I guess it won't get much faster using batch.
As %_VAR% isn't used, you could simplify your second parameter (and skip disassembling %_COND%)
#echo off
setlocal enabledelayedexpansion
set "file=%~1"
set "_COND=%~2"
if not defined file goto :eof
for /f "tokens=1* delims=:" %%a in ("%_COND%") do (
set "_VAR=%%a"
set "_VAL=%%b"
)
rem set _
echo Start: %time%
REM get field names:
for /f "tokens=1*" %%A in ('findstr /b "arry " "%file%"') do (
set cnt=-1
for %%C in (%%B) do (
set /a cnt+=1
set "%%A[!cnt!]=%%C"
)
)
REM get Data-Array:
set "cnt=0" & REM number of data sets
for /f "tokens=1*" %%A in ('findstr /brc:"data .*%_VAL%\>" %file%') do (
set /a cnt+=1
set "cnt2=-1" & REM number of entries in the dataset
for %%C in (%%B) do (
set /a cnt2+=1
call set "%%arry[!cnt2!]%%[!cnt!]=%%C"
call set /a %%arry[!cnt2!]%%[0]=cnt
)
)
echo End: %time%
set |find "["
echo there are entries 0 to %cnt%.
Things that speed it up:
filtering the input (less lines to process)
no IF's at all
works even with empty %_VAL% so no need to check it each iteration of the loop
Possible contras:
filterstring is case sensitive (can be changed with findstr's /i parameter, but would also make the keyword data case insensitive.
Possibly false positives (John / Johnson is no probem because of the word-boundary \>, but JohnJohn would be found with the John filter (Johnjohn wouldn't))
I very much hope the 5-token datasets and the 7-token datasets are in different files
There is no hardcoded limit for the tokens of the dataset.
Runtimes with your example file: 200ms with filter, 260 ms without. Thanks to the filtering, a filtered list is even faster than the unfiltered.

How to trim N characters from last through batch script

I am reading a text file (input.txt) line by line.
(For this, I am using for-loop)
Inside for loop, I am storing each line in a variable.
After storing line in a variable, I want to trim N characters from last from the variable and need to use it for my own purpose.
But I am not able to trim last N(N=4) characters :-(.
Example:
input.txt looks like this:
c:\aaa\bbb\ccc\...
c:\111\222\333\...
Script:
#echo off
setlocal enabledelayedexpansion
set Counter=1
for /f %%x in (Input.txt) do (
set "Line_!Counter!=%%x"
set /a Counter+=1
)
set /a NumLines=Counter - 1
for /l %%x in (1,1,%NumLines%) do (
set trimLast4Char=!Line_%%x!
echo %trimLast4Char:~0,-4%
)
Output I am getting:
~0,-4
~0,-4
Output I want:
c:\aaa\bbb\ccc
c:\111\222\333

How to extract the numbers after a character in windows batch files

Hi I do need to extract the last part of a string after the last dot
Example:
1.2.37 ==> I need the 37
1.2.567 ==> I need the 567
as you can see the number of characters after the dot is not fixed so expressions like
base=%fullver:~0,-2%
Can't be used. How can I achieve this?
#echo off
setlocal enableextensions disabledelayedexpansion
set "fullver=1.2.456"
for %%a in ("%fullver:.=\%") do set "base=%%~na"
echo %base%
The trick is to replace the dots with backslashes, process the string as a path and retrieve the name of the last element in it.
Alternatively, if all the elements need to be retrieved, instead of a for, a for /f is used to tokenize the variable using the dots as separators
#echo off
setlocal enableextensions disabledelayedexpansion
set "fullver=1.2.456"
for /f "tokens=1-3 delims=." %%a in ("%fullver%") do (
set "major=%%a"
set "minor=%%b"
set "build=%%c"
)
echo [%major%] [%minor%] [%build%]
I found the following question which actually tokenizes the string.
How to split a string in a Windows batch file?
May be you can try using this to delimit it with "." and take the last value stored in the string variable. Not sure if there is a simple way, but this works.
Here is an edited Version to fit your Needs:
#echo off
setlocal ENABLEDELAYEDEXPANSION
REM Set a string with an arbitrary number of substrings separated by semi colons
set teststring=1.2.5.234
for /f "tokens=1 delims=." %%a IN ("!teststring!") DO set firststring=%%a
echo !firststring!
REM Do something with each substring
:stringLOOP
REM Stop when the string is empty
if "!teststring!" EQU "" goto END
for /f "delims=." %%a in ("!teststring!") do set substring=%%a
REM Now strip off the leading substring
:striploop
set stripchar=!teststring:~0,1!
set teststring=!teststring:~1!
if "!teststring!" EQU "" goto stringloop
if "!stripchar!" NEQ "." goto striploop
goto stringloop
:END
echo !substring!
endlocal
I prefer MC ND's answer if you are looking for only the last node, or if you know how many nodes there are.
Here is a method to capture all nodes if the total number of nodes is unknown:
#echo off
setlocal enableDelayedExpansion
set "fullver=1.2.456"
:: Parse each node and store in an "array"
set cnt=0
for %%A in (%fullver:.= %) do (
set /a cnt+=1
set "node.!cnt!=%%A"
)
:: Show the results
for /l %%N in (1 1 %cnt%) do echo node.%%N = !node.%%N!
Another solution! This one gets the first and last parts of the string:
#echo off
setlocal
set "testString=1.2.5.234"
set "first="
for %%a in ("%testString:.=" "%") do (
if not defined first set "first=%%~a"
set "last=%%~a"
)
echo First: %first%
echo Last: %last%
As a bonus, this method correctly process special Batch characters that may appear in the string, excepting wild-cards.
You can use the below command to achieve what you want.
base=%fullver:~~4,3%
4 implies 4th digit i.e., 5 and 3 implies 3 digits from 4.
The output will be
567

Batch script issue for getting dynamic column of csv file?

This is script which i am using for export the data from csv and write into a .trn extension file. The code execute for certain column of csv file data right, i mean to say if the column no indexing A to Z, code execute right,but when after the Z column means for AA,AB ect the data gets wrong. Code you can see here:
Batch Script
#echo off
set "line1=^%%a,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,"
set "line2=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,^%%b,,,,,,,,,"
.......................................................................................
.......................................................................................
set "line26=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,^%%z,,,,,,,,,"
set "line27=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,^%%aa,,,,,,,,,"
set "line28=^%%a,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,^%%ab,,,,,,,,,"
(for /F "tokens=1-28 skip=1 delims=," %%a in ('type "NewPortfolios.csv"') do (
echo %line1%
echo %line2%
............
............
echo %line26%
echo %line27%
echo %line28%
)) >"file.trn"
And the csv file data is:
A B C AA AB
$portcode $qbconId $name ....... $pmtper #minfee
asingh12 123456789 Ajay Singh....... ajay 123
Output is:
asingh12,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,123456789,,,,,,,,,
...................................................................................
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,asingh12a,,,,,,,,,
asingh12,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,asingh12b,,,,,,,,,
In the above 2 lines you can see that the column value is coming wrong.
As you can see CSV data the last 2 column value should be ajay and 123 but it is coming as asingh12a and asingh12b.These are the values of a and b.It should come from AA and AB.
Can someone please help me in this.?
**EDITED HERE**
Hi Aacini - Hope you are doing well. I am facing again an issues with .csv file convert in to .txt file. Now this time getting a data from .csv with Quotes(") that's why the batch script is not running properly. Please find the sample data from .csv in to .txt format-
"_portcode","_qbconId","_name","_address","_city","_state","_zip","_bmeth","_ffee","_brak1","_rate0","_brak2","_rate1","_brak3","_rate2","_brak4","_rate3","_brak5","_rate4","_rate5","_bre","_custact","_custody","_qbmgrid","_refby","_txstate","_pmtper","_minfee"
"schorira","001c000000WtrL1AAJ",,"9232 Collegeview Cir","Bloomington","MN","55437","T",,"1000000.0","1.25",,,,,,,,,"1.0","Robert M. Schofield IRA Rollover",,"Schwab","JTB","Patrick Stephens","MN","Quarterly","0". Previous time in .csv data there is no Quotes. Please help me out. If you want more clarification from my side please let me know. I appreciate your help in advance.
Hi Acini,
Till now we are waiting for your reply. Please help me out.
EDIT: I fixed a couple details, it should correctly run now.
EDIT #2: Subtle bug fixed, and an example added
#echo off
set "letter=abcdefghijklmnopqrstuvwxyz"
set "line1=!a!,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,"
set "line2=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,!b!,,,,,,,,,"
set "line26=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,!z!,,,,,,,,,"
set "line27=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,!aa!,,,,,,,,,"
set "line28=!a!,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,!ab!,,,,,,,,,"
setlocal EnableDelayedExpansion
(for /F "usebackq skip=1 delims=" %%a in ("NewPortfolios.csv") do (
set i1=0
set "line=%%a"
for %%b in ("!line:,=" "!") do for /F "tokens=1,2" %%i in ("!i1! !i2!") do (
if %%i lss 26 (
set var=!letter:~%%i,1!
) else (
set var=a!letter:~%%j,1!
)
set "!var!=%%~b!
set /A i1+=1, i2=i1-26
)
echo %line1%
echo %line2%
echo %line26%
echo %line27%
echo %line28%
)) > file.trn
Previous Batch program can output up to a maximum of 52 columns (a..z aa..az), but it is very easy to increment this range. With this input data:
A, B, C, D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, AA, AB
$portcode,$qbconId,$name, D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$pmtper,#minfee
asingh12,123456789,Ajay Singh,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,ajay,123
the output is:
asingh12,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,123456789,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,Z,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,ajay,,,,,,,,,
asingh12,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,123,,,,,,,,,

Resources