|
Hi y'all,
I am trying to find the fastest way to go through a text IFS file and
replace all occurrences of a string. The file sizes that I am working with
range from less then 200 bytes to over 80Kb. Obviously the 80Kb one is
causing the slowness problems that I want to try and remedy.
Below is what I am doing essentially. It only takes two reads from the IFS
file to get all of the data, but I was wondering if there is any way to do a
find and replace faster on that large of a string (65535 varying)?
P Http_conv b export
D Http_conv pi
D pFile 256a value varying
D error ds likeds(Error_simple)
D handle s 10i 0
D tempFile s 256a varying
D tempHandle s 10i 0
D data s 60000a
D bytesRead s 10i 0
D rc s 10i 0
/free
tempFile =pFile + '.temp';
tempHandle = IFS_openFile(tempFile:'CP RW T': ascii);
handle = IFS_openFile(pFile: 'R': ascii);
bytesRead = read(handle: %addr(data): 60000);
dow bytesRead > 0;
data = Util_findReplace(data: '<': '<');
data = Util_findReplace(data: '>': '>');
data = Util_findReplace(data: '"': '"');
data = Util_findReplace(data: '<![CDATA[': '');
data = Util_findReplace(data: ']]>': '');
data = Util_findReplace(data: 'xmlns=""': 'xmlns="x"');
rc = write(tempHandle: %addr(data) :%len(%trimr(data)));
data = *blanks;
bytesRead = read(handle: %addr(data): 60000);
enddo;
//handle =
//open(
//pFile: O_RDWR + O_TRUNC+O_TEXTDATA);
//IFS_writeLine(handle: data);
rc = close(handle);
rc = close(tempHandle);
rc = unlink(pFile);
IFS_move(tempFile: pFile);
/end-free
P e
P Util_findReplace...
P b export
D Util_findReplace...
D pi 65535a varying
D pString 65535a value varying
D pFrom 30a value varying
D pTo 30a value varying
D pos s 10i 0
/free
pos = %scan(pFrom: pString);
dow pos > *zero;
pString = %replace(pTo: pString: pos: %len(pFrom));
pos = %scan(pFrom: pString);
enddo;
return pString;
/end-free
P e
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.