Thanks Dan. It's really close now. But it's duplicating the text string at the
beginning and end of the replaces.
Here's the ouput:
1 This is a test of the templating program. <br>
2 Here's hoping it's working. <br>
3 <br>
4 <br>
5
6 123 123 John Smith 456 456<br>
7
8 123 123 Peter Lem 456 456 <br>
9
10 123 123 Shawn Adams 456 456 <br>
And here's the rewritten code:
1 <?
2 $fp = fopen("new_data.csv", "r");
3 $text = fopen("text.txt", "r");
4 $merged = fopen("merged_text.html", "w");
5 $filecontents = fread($text,filesize("text.txt"));
6 while ($data = fgetcsv ($fp, 1000, ",")) {
7 $num = count ($data);
8 $fullname = $data[0] . ' ' . $data[1];
9 $newfullname = '123 ' . $fullname . ' 456';
10 $filecontents = str_replace($fullname, $newfullname, $filecontents);
11 }
12 fclose ($fp);
13 fwrite($merged,$filecontents);
14 fclose ($merged);
15 fclose ($text);
16 ?>
by the way, were you saying I don't need the fcloses?
Thanks!
Josh
>> Subject:
>>
>> Re: [PHP] gobbling replace
>> From:
>>
>> Analysis & Solutions <[EMAIL PROTECTED]>
>> Date:
>>
>> Thu, 9 May 2002 23:39:34 -0400
>> To:
>>
>> PHP List <[EMAIL PROTECTED]>
>>
>>
>>On Thu, May 09, 2002 at 03:17:09PM -0400, Josh & Valerie McCormack wrote:
>>
>
>>>>I'm doing a str_replace (same thing happens with ereg and preg) and when
>>>>the pattern is found it's erasing everything after it and doing a
>>>>strange replace, too.
>>>>
>>>>I'm using a seven column CSV (new_data.csv) where the first [0] column
>>>>is first name and the second [1] is last name. This is what I'm trying
>>>>to search for, and replace with with some characters on either side. So
>>>>it will find John Smith and replace it with 123 John Smith 456.
>>>>
>>>>Here's the file I"m trying to do the replaces in (text.txt):
>>>> 1 This is a test of the templating program. <br>
>>>> 2 Here's hoping it's working. <br>
>>>> 3 <br>
>>>> 4 <br>
>>>> 5
>>>> 6 John Smith <br>
>>>> 7
>>>> 8 Peter Lem <br>
>>>> 9
>>>> 10 Shawn Adams <br>
>>>>
>>>>Here's the program:
>>>> 1 <?
>>>> 2 $row = 1;
>>>> 3 $fp = fopen("new_data.csv", "r");
>>>> 4 while ($data = fgetcsv ($fp, 1000, ",")) {
>>>> 5 $num = count ($data);
>>>> 6 $row++;
>>>> 7 for ($c=0; $c < $num; $c++) {
>>>> 8 $text = fopen("text.txt", "r");
>>>> 9 $merged = fopen("merged_text.html", "w");
>>>> 10 $filecontents = fread($text,filesize("text.txt"));
>>>> 11 $fullname = $data[0] . ' ' . $data[1];
>>>> 12 $newfullname = "123 " . $fullname . " 456";
>>>> 13 $new_filecontents = str_replace($fullname,
>>>>$newfullname, $filecontents);
>>>> 14 fwrite($merged,$new_filecontents);
>>>> 15 fclose ($merged);
>>>> 16 fclose ($text);
>>>> 17 copy("merged_text.html", "text.txt");
>>>> 18 }
>>>> 19 }
>>>> 20 fclose ($fp);
>>>> 21 ?>
>>>>
>>>>by the way, I know it's horribly ugly to open and close the file in the
>>>>loop like that, but when it was outside the loop no changes were saved.
>>>>
>>
>>
>>Put ALL of the fopen()'s AND fread()'s before the while loop.
>>
>>Put ALL of the fwrite()'s AND (unnecessary) fclose()'s after the end of the while
>>loop.
>>
>>The only thing you should be doing inside the loop is searching/replacing. The
>while
>>aspect will automaticall bring up the next names to be searching for.
>>
>>That for loop shouldn't be there...
>>
>>
>
>>>>Here's the ouput (merged_text.html):
>>>> 1 This is a test of the templating program. <br>
>>>> 2 Here's hoping it's working. <br>
>>>> 3 <br>
>>>> 4 <br>
>>>> 5
>>>> 6 123 123 123 123 123 123 John Smith 456 456 456 456 4
>>>>
>>
>>
>>The odd replacement is due to the itterations for each record in the csv file caused
>>by mistakenly using that for loop. Ditch it.
>>
>>Enjoy,
>>
>>--Dan
>>
>>
>> ------------------------------------------------------------------------
>