Re: Remove blank lines from a file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Robert Cummings wrote:
Nathan Rixham wrote:
Robert Cummings wrote:
Nathan Rixham wrote:
Nathan Rixham wrote:
Robert Cummings wrote:
tedd wrote:
At 1:02 PM -0400 5/22/10, Robert Cummings wrote:
tedd wrote:
If 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);
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.
Rob:

It's not broken according to my "given", which was "If that is all (i.e., removing double linefeeds), then this will do it:" My code does exactly what was stated.
Actually, his comment didn't say double line feeds... his comment said I want THIS to look like THAT. And THIS had a triple line feed and THAT completely normalized it to a single line feed. I realize you misunderstood the problem, but where I work, clients don't think a solution based on incorrect presumptions is a valid solution for a clearly defined problem :)

I did not catch there were more than two linefeeds in the OP's problem. Doing more was something I did not address.

Also, the solution you provided works better this way:  :-)

$input = preg_replace( "#[\r\n]+[[:space:]]+[\r\n]+#", "\n", $input );
$input = preg_replace( "#[\r\n]+#", PHP_EOL, $input );
$input = trim( $input );
preg_replace( "/(\s)\s+/im", '\\1', $input );

:)
ahh just read the rest of this thread.. icnase it gets a bit pedantic then here's a horizontal white space only one:
   preg_replace( "/(\h)\h+/im", '\\1', $input );

and vertical only:
   preg_replace( "/(\v)\v+/im", '\\1', $input );

(spot a pattern?)
Hi Nathan,

You may want to start testing your solutions. None have worked yet. Not even close :)

filed under 'works for me'

<?php
$input = 'blah b  asd as d
asd
a
sd

da




  asd
   d
   asd


    da';
echo preg_replace( "/(\s)\s+/im", '\\1', $input );

on PHP/5.2.8 produces:

blah b asd as d asd
a
sd
da asd
d
asd
da

unless I'm completely missing the elephant in the room here!

Doesn't appear to work on the following:

$input = '

1
2

3
4


5

6';

Additionally, your solution modifies lines that weren't asked to be modified :) I realize it potentially makes for a more succinct solution (if you ever get it to work properly in the general case) but it is not a valid solution for the requested functionality-- The OP did not ask for trimming of lines with content ;)

quote:

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
6
</quote>

the above produces what's required; and hence the vertical whitespace only solution included too "/(\h)\h+/im"

what version are you on btw? not being an ass and actually am interested in where it doesn't work (as I use the code on some important sites & in some apps that are open sourced)

Best,

Nathan

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux