|
|
|
| Итак ,есть текстовый файл к примеру text.txt
Файл содержит N-ное колличесвто строк разной длины
Первые 7 символов каждой строки отделены от следущиего текста строки пробелом
Замечание(Строки содержат N-ное колличество пробелов)
Вопрос:
Как мне заменить сразу во всех строках пробел на тире, но только пробелы которые стоят после первых 7 символов каждой строки? | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 05:34)
| | я бы это сделал с помощью регулярных выражений. что-то типа:
<?
$string=preg_replace('^(.{7}\s)', '\1-', $string);
|
| |
|
|
|
|
|
|
|
для: Loki
(04.02.2009 в 09:42)
| | как мне применить к файлу?т.е если например 7000 строк? | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 11:03)
| | Если пробел который нужно заменить - гарантированно первый в строке, то подойдет такое решение:
<?
$filename = '1.txt';
//получаем данные из файла - каждую строку в свой элемент массива
$array = file($filename);
//для каждой строки
foreach($array as &$a)
{
//заменяем первый встречающийся пробел на тире
$a = str_replace(' ', '-', $a, 1);
}
?>
|
| |
|
|
|
|
|
|
|
для: Temnovit
(04.02.2009 в 11:14)
| |
foreach($array as $key=>$a)
{
$array[$key] = str_replace(' ', '-', $a, 1);
}
|
а то у Вас результат уходит в "великое ничто"... это при условии что четвертый параметр str_replace делает именно то, что Вы ожидаете:) | |
|
|
|
|
|
|
|
для: Loki
(04.02.2009 в 11:20)
| | Ага, уже успел исправить. Еще подходит амперсант поставить перед $a | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 11:03)
| | Для любителей тонких извращений - заменяем восьмой символ на тире, каким бы он не был:
<?
$filename = '1.txt';
//получаем данные из файла - каждую строку в свой элемент массива
$array = file($filename);
//для каждой строки
foreach($array as &$a)
{
//заменяем 8-й символ на тире
$a[7] = '-';
}
?>
|
| |
|
|
|
|
|
|
|
для: Temnovit
(04.02.2009 в 11:18)
| | для любителей тонких извращений ничего не происходит, а код
<?
$filename = '1.txt';
//получаем данные из файла - каждую строку в свой элемент массива
$array = file($filename);
//для каждой строки
foreach($array as &$a)
{
//заменяем первый встречающийся пробел на тире
$a = str_replace(' ', '-', $a, '1');
?>
|
выдает ошибку Fatal error: Only variables can be passed by reference в строке где происходит замена пробела на тире | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 12:26)
| | Да, четвертый параметр это не то, что я подумал :)
Попробуйте так:
<?
foreach($array as &$a)
{
//заменяем первый встречающийся пробел на тире
$a = implode( "-", explode(" ", $a, 2) );
}
?>
|
| |
|
|
|
|
|
|
|
для: Temnovit
(04.02.2009 в 16:20)
| | Скрипт выполняется, но содержимое файла не изменяется (как было все с пробелами так и осталось)....какие еще предложения? | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 17:19)
| | Вы вообще этот массив потом записываете в файл или ждёте, что файл обновится сам? | |
|
|
|
|
|
|
|
для: BinLaden
(04.02.2009 в 17:42)
| | Всем спасибо, вариант
<?php
$filename = '1.txt';
$array = file($filename);
$f = fopen($filename, 'w+');
foreach($array as &$a)
{
$a[7] = '-';
fputs($f, $a);
}
fclose($f);
?>
|
признан лучшим:) | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 12:26)
| | Fatal error: Only variables can be passed by reference
Ну разумеется. Вы ведь передаёте третий параметр для str_replace константу '1'
Встроенные функции в целях ускорения (для интерпретируемого языка это очень важно) работают по ссылкам.
Более того, если вы напишите свою функцию с параметром по значению, функция всёравно получит переменную по ссылке и это будет ссылкой до тех пор, пока код не начнет менять содержимое переменной, в этот момент интерпретатор сделает копию (т.е. ссылочный аргумент наконец станет аргументом по значеню).
$a = '1';
$a = str_replace(' ', '-', $a, $a);
не будет ругаться. | |
|
|
|
|
|
|
|
для: chexov
(04.02.2009 в 11:03)
| | Утилитой grep, egrep или аналогисной.
AlexNZ , зачем Вы вытащили это старье наверх? | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 11:02)
| | Сорри, о каком верхе идёт речь? | |
|
|
|
|
|
|
|
для: AlexNZ
(13.08.2009 в 11:49)
| | Тему никто не трогал полгода.
Тему, по которой вроде как стороны пришли к консенсусу.
Зачем она Вам понадобилась?
При чем как я заметил, не она одна. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 11:53)
| | А вот оно что... я то на неё через поисковик попал...
Ну теперь уже только время всё исправит. )))
Впрочем, интерес и время не сильно связаны.
P.S. что-то наш диалог в оффтопе... | |
|
|
|