array+chop

MX

Guest
Двойные пробелы

Доброго дня!
Ума не приложу в чем может быть проблема.
Есть файл дос-текст, в котором нужно убрать двойные пробелы.
Я делаю так:
$fcontents = file('filein.txt');
$content = "";
foreach ($fcontents as $value) $content.= trim(chop($value));

Затем полученую переменную $content вываливаю в файл. ...Двойные пробелы _остаются_ на месте.
:confused:
 

Demiurg

Guest
А причем тут пробелы то ? Этот код убирает все переводы строк, причем давольно криво убирает.
 

MX

Guest
???
но почему тогда
echo trim(chop(" а___б__в "));
возвращает "а_б_в" ??

зы "_" - пробел
 

Demiurg

Guest
echo trim(" а б в ") тоже возвратит "а б в".
почему, написано здесь: [m]trim[/m]
 

Андрей М.

Guest
MX:
может не самый оптимальный алгоритм, зато понятный:
Код:
<?php
$file=file("test.txt");
function filter($x){
      /*функция, определяющая пустой
       или не пустой элемент.
       Если пустой будем его отфильтровывать */
	$x=trim($x);
	return !empty($x); 
}
for($i=0;$i<sizeof($file);$i++){
	$file[$i]=explode(" ",$file[$i]);
	//каждую строчку файла в массив
	$file[$i]=array_filter($file[$i],"filter");
	//собственно фильтруем базар
	$file[$i]=implode(" ",$file[$i]);
	//массив в строку
}
$file=implode("\n",$file);
//объединяем массив в текст
print "<xmp>".$file;
?>
 

Demiurg

Guest
Андрей М., вообщето все это делается в пару строчек.
 

Long

Новичок
Андрей М. думаю, что str_replace будет работать значительно быстрее ;)
 

Crazy

Developer
Автор оригинала: MX
???
но почему тогда
echo trim(chop(" а___б__в "));
возвращает "а_б_в" ??

зы "_" - пробел
Тебя глучит. Этот оператор выводит а___б__в (здесь _ - пробел). Чаще делай viewsource...
 

Андрей М.

Guest
Demiurg, регэкспом? если нет, то интересно как... а если регэкспом, то, имхо, не нужно использовать регулярные выражения там, где можно без них обойтись...
а вообще говоря мой код тоже в две (ну в три) строки запросто умещается:)

Long, str_replace с чего на чего? с двух пробелов на один? а если их три, четыре, табуляция...:)
 

Demiurg

Guest
> имхо, не нужно использовать регулярные выражения там, где можно без них обойтись...
обойтись без них моно всегда, но в этом случае, они будут быстрее и понятнее.
 

MX

Guest
че то я стормозил :)
Вот что теперь получилось:
$content = ereg_replace("[\t\x20]{2,}"," ",$content);

Спасибо всем!
 
Сверху