0

I Created html file and I replaced some values in html file. It is fine. But I want to use for loop and replace values. But my problem is it replace only final value.

my html code :

<body bgcolor="#F5DA81">
<h1><center>Simple Report</center></h1>
<p> This report contais about comapny details according to contact details.</p>
<center><b><u><h3>Company Details</h3></u></b></center>
    <table>
        <tr><td>Company Name:</td><td><!--company--> </td></tr>
        <tr><td>Company Id  :</td><td><!--companyId--></td></tr>
    </table>
<center><b><u><h3>Contact Details</h3></u></b></center>
    <table>
        <tr><td>Contact Name:</td><td><!--contact--></td></tr>
        <tr><td>Contact Id  :</td><td><!--contactId--></td></tr>
    </table>
</body>

My for loop array to replace values.

NSMutableArray *valueArray = [[NSMutableArray alloc]init];
NSString *va = @"NU";
NSString *va1 = @"My Name";
NSString *va2 = @"WEB";
NSString *va3 = @"My Web System";

[valueArray addObject:va];
[valueArray addObject:va1];
[valueArray addObject:va2];
[valueArray addObject:va3];

NSMutableArray *myValue = [[NSMutableArray alloc]init];
NSString *val = @"<!--company-->";
NSString *val1 = @"<!--companyId-->";
NSString *val2 = @"<!--contact-->";
NSString *val3 = @"<!--contactId-->";

[myValue addObject:val];
[myValue addObject:val1];
[myValue addObject:val2];
[myValue addObject:val3];

NSMutableString *html1=[[NSMutableString alloc]init];

    for(int i = 0 ; i < 4; i++) {

        NSString *myFinalString = [myValue objectAtIndex:i];
        NSString *myVal = [valueArray objectAtIndex:i];
        html1 =[self HtmlReportName:@"myFirst" withReplaceId:myFinalString withValue:myVal];
        i = i + 1;
    }    

    [webView loadHTMLString:html1 baseURL:[[NSBundle mainBundle] resourceURL]];

Method of Html replacing.

-(NSMutableString *) HtmlReportName:(NSString *)reportName withReplaceId:(NSString *)replaceId withValue:(NSString *)value {
NSMutableString *html;
html = [NSMutableString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:reportName ofType:@"html"] encoding:NSUTF8StringEncoding error:nil];
[html replaceOccurrencesOfString:replaceId withString:value options:0 range:NSMakeRange(0, [html length])];
return html;

}

In my web view shows only last value. I want to show all replaced value in web view.

My Edited Code ::

NSMutableString *html12 = [NSMutableString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"myFirst" ofType:@"html"]                                                           encoding:NSUTF8StringEncoding error:nil];

for (NSUInteger i = 0; i < [valueArray count]; i++) {

    NSString *myFinalString = [myValue objectAtIndex:i];
    NSString *myVal= [valueArray objectAtIndex:i];
    [html12 replaceOccurrencesOfString:myVal
                          withString:myFinalString
                          options:0
                          range:NSMakeRange(0, [html12 length])];
}

 [webView loadHTMLString:html12 baseURL:[[NSBundle mainBundle] resourceURL]];
2
  • As noted in my answer; you have the use of myValue and valueArray arrays back-to-front. Commented Feb 1, 2013 at 11:25
  • Now Its running!. Thank for your answer. Im new to Objective c. Commented Feb 1, 2013 at 11:30

1 Answer 1

1

The issue is that you are not passing the modified HTML back into the next substitution, and you're instead reloading the original HTML each time, and are therefore losing the previous substitution.

Try this:

NSMutableString *html = [NSMutableString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:reportName ofType:@"html"]
                                                         encoding:NSUTF8StringEncoding
                                                            error:nil];
NSAssert([myValue count] == [valueArray count], @"Doh!");
for (NSUInteger i = 0; i < [valueArray count]; i++)
{
    NSString *myFinalString = [valueArray objectAtIndex:i];
    NSString *myVal= [myValue objectAtIndex:i];
    [html replaceOccurrencesOfString:myVal
                          withString:myFinalString
                             options:0
                               range:NSMakeRange(0, [html length])];
    // Remove i=i+1 !!!
}    

And dump the pointless HtmlReportName method.

NOTE you had the use of valueArray and myValue arrays back-to-front and please give them better names!

Sign up to request clarification or add additional context in comments.

2 Comments

I tried your code. But still not showing all values in webview. Ya.. I normally gives proper names for variables. But this is sample project. that's why I used normal names.
@Gayan, OK please edit your question and add the new code you are using (leaving the old code snippet there).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.