Рассортировать по количеству символов

DDL

Guest
Рассортировать по количеству символов

Добрый вечер всем!
У меня возникла проблема, сейчас попробую его описать.
В общем файл (3Mb) содержит строки:
"aabae" - "fskgfdh",
"a" - "fdsterdf4",
"aha" - "fdgfds",

надо рассортировать чтобы было так:
"a" - "fdsterdf4",
"aha" - "fdgfds",
"aabae" - "fskgfdh",

тоесть по количеству символов в первой части.

Может кто-нибудь помочь?
Зарание спасибо!
 

SelenIT

IT-лунатик :)
DDL

Желательно уточнить конечную цель этой процедуры. "В лоб" задача решается через file + usort + explode + strlen, но вероятнее всего, что в этом просто нет надобности.
 

DDL

Guest
Цель - соxранение в файл в рассортированном виде.
 

SelenIT

IT-лунатик :)
А какова цель соxранения в файл в рассортированном виде?
 

SelenIT

IT-лунатик :)
Ну уж если сортировать скриптом, то и удалять, наверное, логичнее скриптом же. Вернее, просто не записывать "слишком длинные" строки обратно в файл.
 

DDL

Guest
Возможно логичнее и проще, строка должна удалятся если в первой части более 15 символов или существует пробел.

Просто дело в том что и представления не имею как это сделать...
 

SelenIT

IT-лунатик :)
Открыть файл можно ф-цией [m]fopen[/m]. Прочитать из него строку - функцией [m]fgets[/m]. Проверить на допустимую длину и наличие пробела - функциями [m]strlen[/m] и [m]strpos[/m], либо регулярными выражениями. Если строка прошла проверку - добавить ее в новый файл с помощью [m]fwrite[/m]. После обработки всего исходного файла, его можно удалить и заменить созданным.
 

DDL

Guest
<?
$file='file.txt';
$a = file($fileold);
$b = '';

foreach($a as $line) {
$parts = explode(' - ',$line);
$s=strlen($parts[0]);
$p = strpos($parts[0], ' ', 1);
if ($s>16 or $p){
echo $line."<br>";

} }
?>

Вот что то накалякал, выводит длинные строчки и с пробелом, но как сделать так чтобы они не записывались в новый файл? В php я полный новичок, прошу не ругаться :)

-~{}~ 28.06.05 23:31:

Вот, лишнее убрал...

<?
$file='file.txt';
$a = file($file);
foreach($a as $line) {
$parts = explode(' - ',$line);
$s=strlen($parts[0]);
$p = strpos($parts[0], ' ', 1);
if ($s>16 or $p){
echo $line."<br>";

} }
?>
 

rotoZOOM

ACM maniac
А где у тебя вообще запись в новый файл ?
IMHO все таки считывать и записывать лучше построчно,
скорость сильно не упадет, зато экономия памяти.
hint: запись в файл fwrite
 
Сверху