Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
hopkinsc
Partner - Specialist III
Partner - Specialist III

LOOP THROUGH FILES IN FOLDER AND REMOVE CHARACTERS FROM FIELD NAMES AND DATA

Hi All,

i need some help with getting some files stored to QVD but removing some characters from the data and field names.

there are over 500 files in total, i can do it manually but it will be very time consuming as each file has different field names ( i can't get * to work).

basically the field names are in the format of

@@FIELD1@@

@@FIELD2@@

@@FIELD3@@

etc

and the data held against each field is in the same format, i.e...

@@FIELD1@@

@@VALUE1@@

@@VALUE2@@

@@VALUE3@@

etc

also, the last field in in each file has a SPACE before the last 2@@ i.e.

[@@FIELD40@@ ]

the space also needs to be removed.

I have attached an example, can anyone help please?

11 Replies
sunny_talwar

I don't really understand, your qvw does seem to work. What is the issue?

hopkinsc
Partner - Specialist III
Partner - Specialist III
Author

Hi, yes the sample i uploaded does work. what i am asking though is there a quick way of doing the same thing for over 500 files, all with different fields.

otherwise i have to load each file int the script, perform a find and replace @@ with nothing, remove the space from the last field name and edit the delimiter to @@|@@ manually which will be very time consuming.

sunny_talwar

That make sense.

sivarajs
Specialist II
Specialist II

You can remove the special characters in field values using mapsubstring. Here is an example,

ReplaceMap:

MAPPING LOAD * INLINE [

char, replace

@,

]

;

TestData:

LOAD

*,

MapSubString('ReplaceMap', data) as ReplacedString,

MapSubString('ReplaceMap', data1) as ReplacedString1

;

LOAD * INLINE [

data,data1

@@@AAA@@@,@@123@

@@@BBB@@@,@@345@@@

@CCC@@@,@1111@

@@@DDD@,@@@22@

]

;

I am not sure how we can do for all field names.

Regards,

Sivaraj

hopkinsc
Partner - Specialist III
Partner - Specialist III
Author

does anyone have any ideas on how i can do this?

tamilarasu
Champion
Champion

Hi Hopkinsc,

Try something like below,

Sub ScanFolder(Root)

For Each FileExtension in 'txt'

   For Each FoundFile in FileList( Root & '\*.' & FileExtension)

Data:

LOAD

SubField('$(FoundFile)','\',SubStringCount('$(FoundFile)','\')+1) as FileName,

Trim(Replace (@@CVCRCD@@,  '@@','')) as CVCRCD,

Trim(Replace (@@CVDL01@@,  '@@','')) as CVDL01,

Trim(Replace (@@CVEC@@,    '@@','')) as CVEC,

Trim(Replace (@@CVCDEC@@,  '@@','')) as CVCDEC,

Trim(Replace (@@CVCKR@@,   '@@','')) as CVCKR,

Trim(Replace (@@CVUSER@@,  '@@','')) as CVUSER,

Trim(Replace (@@CVPID@@,   '@@','')) as CVPID,

Trim(Replace (@@CVUPMJ@@,  '@@','')) as CVUPMJ,

Trim(Replace (@@CVJOBN@@,  '@@','')) as CVJOBN,

Trim(Replace ([@@CVUPMT@@],'@@','')) as CVUPMT

FROM

[$(FoundFile)]

(txt, codepage is 1252, embedded labels, delimiter is '|', msq);

Next FoundFile

Next FileExtension

End Sub

Call ScanFolder('C:\Users\Tamilarasu.Nagaraj\Desktop\Test_196312') ;

Capture.PNG

Sample application attached against your data. Let me know.

MarcoWedel

see also:

remove ## from field names

regards

Marco

effinty2112
Master
Master

Hi,

The Purgechar and SubField functions might be useful to you:

Currencies:

Load

PurgeChar(SubField(@1,'|',1),'@') as Abbreviation,

PurgeChar(SubField(@1,'|',2),'@')  & ' ' & @2 as Currency;

LOAD @1,

     @2

FROM

Data1.txt

(txt, codepage is 1252, no labels, delimiter is ' ', msq) Where RecNo()>1;

gives this table:

Abbreviation Currency
ESPSpanish Peseta
EUREuro
FRFFrench Franc
GBPPounds Sterling
ITLItalian Lira
PLZPolish Zloty
PTEPortugese Escudo
USDU.S.A. Dollar
hopkinsc
Partner - Specialist III
Partner - Specialist III
Author

Hi Andrew / Marco

Thanks for the reply. unfortunately this isnt the answer as the data was provided to me using a custom delimiter of @@|@@ because the data values include pipes. so if i strip out the @ characters and use a pipe as a delimiter then this would cause problems with the pipes that are supposed to be present in the values. (if that makes sense).

What i need is to strip out all @ from the field names, store out and read back in using the @@|@@ delimiter.

unless there is another way where i don't have to read in each file twice.