You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2003/02/25 15:04:26 UTC
DO NOT REPLY [Bug 17372] New: -
Enhancement of replace Task
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17372>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17372
Enhancement of replace Task
Summary: Enhancement of replace Task
Product: Ant
Version: 1.5.1
Platform: All
OS/Version: All
Status: NEW
Severity: Enhancement
Priority: Other
Component: Core tasks
AssignedTo: dev@ant.apache.org
ReportedBy: vidhya@siptech.co.in
Hi,
Herewith I am submitting the enhanced code of Replace task .The existing
replace
task has the functionality to replace all occurrences of the string specified
in
the 'token' attribute .
The enhanced code adds the following functionality's.
1.'firstoccurence' can be true/false ,default value is false. Only the first
occurrence of the string gets replaced .
2. 'lastoccurence' can be true /false ,default value is false. Only the
lastoccurence of the string gets replaced .
3.'nthoccurence' attribute takes an integer value If the int value is 4 , the
fourth occurrence of the string gets replaced
4. 'fromline ' and ' toline' attributes applies the replace task functionality
to a specified portion of the file.
e.g.; if fromline ='4' and toline='7' , the replacement occurs only between
line 4 and 7 .
Please find the enhanced code given below.
---------------------------
Code ...
private boolean firstoccurence = false;
private boolean lastoccurence = false;
private int nthoccurence=0;
private int fromline= 0;
private int toline = 0;
private void processFile(File src) throws BuildException {
.
.
.
//reads a part of the file specified by
// fromline and toline into foundpart
StringBuffer part1=new StringBuffer();
StringBuffer foundpart=new StringBuffer();
StringBuffer part2 = new StringBuffer();
StringBuffer fullbuf= new StringBuffer();
String tmpstr= new String();
String nstring= new String();
/* if from and to lines are specified*/
if(fromline!=0 && toline!=0){
if(i!=fromline){
for(i=1; i<fromline;i++){
tmpstr=(String)br.readLine();
part1.append(tmpstr).append("\n");
}
}
for(i=fromline;i<=toline;i++){
tmpstr=(String)br.readLine();
if(tmpstr==null)break;
foundpart.append(tmpstr).append("\n");
}
/*contains the string between the lines from and to*/
nstring = foundpart.toString();
while(true){
tmpstr=br.readLine();
if(tmpstr==null) break;
part2.append(tmpstr).append("\n");
}
}
if(fromline!=0 && toline!=0)
nstring=stringReplace(nstring,tok,val);
else
newString = stringReplace(newString, tok, val);
if (replacefilters.size() > 0) {
if (fromline !=0 && toline!=0)
nstring=processReplacefilters(nstring,src.getPath());
else
newString = processReplacefilters(newString, src.getPath());
}
if(fromline!=0 && toline!=0){
if(part1!=null) newString=part1.toString()+nstring.toString();
else newString=nstring.toString();
if(part2!=null) newString+=part2.toString();
}
.
.
.
}
public void setFirstOccurence(boolean firstoccurence){
this.firstoccurence= firstoccurence;
}
public void setLastOccurence(boolean lastoccurence){
this.lastoccurence=lastoccurence;
}
public void setNthoccurence(int nthoccurence){
this.nthoccurence= nthoccurence;
}
public void setFromLine(int fromline){
this.fromline = fromline;
}
public void setToLine(int toline){
this.toline= toline;
}
private String stringReplace(String str, String str1, String str2) {
StringBuffer ret = new StringBuffer();
int start = 0;
int found = str.indexOf(str1);
int count=1;
int lfound=str.lastIndexOf(str1);
while (found >= 0) {
appendString(ret,str.substring(start,found));
//replaces the first occurence if firstoccurence is true and count
//is equal to one.
if(firstoccurence && count == 1) {
appendString(ret,str2);
//breaks the loop only if firstoccurence attribute is specified
//as true and nthoccurence is zero or not specified and also
//if lastoccurence is false
if(firstoccurence && !lastoccurence && nthoccurence == 0) {
start = found + str1.length();
break;
}
}else if(nthoccurence == count) {
//replaces the nth occurence if nth occurence and count
//is equal.
appendString(ret,str2);
if(!firstoccurence && !lastoccurence && nthoccurence != 0) {
start = found + str1.length();
break;
}
}else if(!firstoccurence && !lastoccurence && nthoccurence == 0) {
//if no attributes firstoccurence, lastoccurence &
//nth occurence is specified then it replaces all token with the
//specified value.
appendString(ret,str2);
}else {
//breaks the loop only if lastoccurence attribute is specified
//as true and nthoccurence is zero or not specified and also
//if firstoccurence is false
if(!firstoccurence && lastoccurence && nthoccurence == 0) {
appendString(ret,str.substring(found,lfound));
appendString(ret,str2);
start = lfound + str1.length();
break;
}else if(lfound == found && lastoccurence) {
//replaces the last occurence
appendString(ret,str2);
}else {
appendString(ret,str1);
}
}
// search again
start = found + str1.length();
found = str.indexOf(str1, start);
++replaceCount;
count++;
}
if(str.length() > start) {
appendString(ret,str.substring(start, str.length()));
}
return ret.toString();
}
//newly added
private void appendString(StringBuffer sb, String str) {
if(str != null) {
sb.append(str);
}
}
-------------------------------------------------------------
Thanks and regards
C.S.Vidhya
SIP Technologies and Exports Ltd. Chennai, India