Re: Remove blank lines from a file
| From: | Al | Date: | Sat, 22 May 2010 21:41:23 +0000 |
| Subject: | Re: Remove blank lines from a file | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-305429@lists.php.net to get a copy of this message | ||
On 5/22/2010 4:34 PM, Robert Cummings wrote:
Al wrote:Ignoring the space and tabs, you're right, the + does it. One or more always reduces to one only.On 5/22/2010 1:02 PM, Robert Cummings wrote:My solution worked well where spaces were not an issue. Your solution breaks my more general solution. Although I did realize I should have trimmed the final output since any empty lead lines will not be removed. Please review and see why you're comment to use [\r\n]{2,} does not work properly. Correcting for lead blank lines and handling spaces in a blank line is also quite simple without having to use the heavy solution of foreach: <?php $data = preg_replace( "#[\r\n]+[[:space:]]+[\r\n]+#", "\n", $input ); $data = preg_replace( "#[\r\n]+#", PHP_EOL, $input ); $data = trim( $input ); ?> Without benchmarking, I'm willing to bet this is faster and less memory intensive than your foreach solution :) Cheers, Rob.tedd wrote:Rob: Your solution doesn't remove the blank lines [\r\n]+ use instead [\r\n]{2,} So 2 or more becomes only 1. In general, problem is trickier when the following are considered. # means any number. 0, 1..... some textEOL #spacesEOL more text some text#spacesEOL #spacesEOL .... any number of these #spacesEOL more text some textEOL EOL ...any number of these EOL some text The white space before the EOLs can also be tabs Look at the solution I posted earlier. The trim() removes all the white spacesAt 4:27 PM +0200 5/21/10, Anton Heuschen wrote:Sorry tedd, this is broken. It doesn't solve problems with runs of greater than 2 newlines which is even in the example :) I would use the following instead which is also line break agnostic with final output in the style for your system: <?php $data = preg_replace( "#[\r\n]+#", PHP_EOL, $input ); ?> Cheers, Rob.So in the file it would look like (from the original file the user uploads that is) 1 2 3 4 5 6 but when the file is saved to the server it must look like 1 2 3 4 5 6If that is all (i.e., removing double linefeeds), then this will do it: $text_array = array(); $text_array = explode("\n\n", $input_text); $output_text = implode("\n",$text_array);