Отсортировка двух текстовых файлов по цифрам в порядке возрастания

J
На сайте с 06.07.2011
Offline
160
777

Какой час уже бьюсь.

Есть два текстовых файла mashina.txt и mashina2.txt

В файле mashina.txt идут вряд слова

lodki 5

katera4

lodki 8 naduvnie

и т д

В файле mashina2.txt аналогичные слова

lodki 8 naduvnie

lodki 5

katera4

katamarani 9

и т д

Подскажите пожалуйста, как можно отсортировать текстовые файлы по цифрам в порядке возрастания.

т.е. должно быть так в двух файлах:

katera4

lodki 5

lodki 8 naduvnie

и

katera4

lodki 5

lodki 8 naduvnie

katamarani 9

SeVlad
На сайте с 03.11.2008
Offline
1609
#1
jano:
Подскажите пожалуйста, как можно отсортировать текстовые файлы по цифрам в порядке возрастания.

Скопировать цифры в начало строки, отсортировать, удалить.

В любом блокноте с поддержкой регулярок.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
J
На сайте с 06.07.2011
Offline
160
#2
SeVlad:
Скопировать цифры в начало строки, отсортировать, удалить.

В любом блокноте с поддержкой регулярок.

Удалять ничего не нужно, только в порядке возрастания рассортировать строки, в которых есть цифры:

1

2

3

4

В notepad++ с помощью регулярных выражений - не получается.

Может как-то на php?

SeVlad
На сайте с 03.11.2008
Offline
1609
#3
jano:
Удалять ничего не нужно,

Чит внимательнее - удалить начальные цифры.

katera4 ->4katera4->katera4

jano:
В notepad++ с помощью регулярных выражений - не получается.

Как-то так (возможно требует доработки):

Найти

(.*)(\d)

заменить на

\2\1\2

(не уверен какой синтаксис в замене поддерживает n++)

J
На сайте с 06.07.2011
Offline
160
#4
SeVlad:
Чит внимательнее - удалить начальные цифры.
katera4 ->4katera4->katera4

Как-то так (возможно требует доработки):
Найти
(.*)(\d)

заменить на
\2\1\2

(не уверен какой синтаксис в замене поддерживает n++)

Зачем удалять цифры, если они нужны те, которые стоят там? :)

Мне нужно рассортировать грубо говоря дески по цифрам: от 1 до 1000

Сначала скрипт ищет деск в котором есть цифра 1 и ставит его ан первое место, далее ищет 2, на второе и т д

LovelAss
На сайте с 05.06.2009
Offline
96
#5


$files = array(
'mashina.txt',
'mashina2.txt'
);

if (is_array($files) && count($files)) {
foreach ($files as $file) {
if (!file_exists($file)) {
continue;
}
$data = file($file);
if (is_array($data) && count($data)) {
$tmp_arr = array();
foreach ($data as $key => $value) {
if (preg_match('#([0-9])#', $value, $matches)) {
$tmp_arr[$key] = $matches[1];
}
}
if (count($tmp_arr)) {
asort($tmp_arr);
$new_arr = array();
foreach ($tmp_arr as $key => $value) {
$new_arr[] = $data[$key];
}
if (@file_put_contents($file, implode('', $new_arr))) {
echo 'File '.$file.' - SUCCESS<br>';
} else {
echo 'File '.$file.' - ERROR<br>';
}
}
unset($data);
}
}
}
SeVlad
На сайте с 03.11.2008
Offline
1609
#6
jano:
Зачем удалять цифры, если они нужны те, которые стоят там?

Чукча не читатель, чукча писатель? (из анека)

В третий и последний раз: вначале добавляешь цифры в начало строки, копируя существующие из середины/конца строки. После сортировки - их удаляешь. Начальные. Приводя таким образом строки в исходное состояние. С цифрами внутри/в конце строк.

J
На сайте с 06.07.2011
Offline
160
#7
LovelAss:

$files = array(
'mashina.txt',
'mashina2.txt'
);

if (is_array($files) && count($files)) {
foreach ($files as $file) {
if (!file_exists($file)) {
continue;
}
$data = file($file);
if (is_array($data) && count($data)) {
$tmp_arr = array();
foreach ($data as $key => $value) {
if (preg_match('#([0-9])#', $value, $matches)) {
$tmp_arr[$key] = $matches[1];
}
}
if (count($tmp_arr)) {
asort($tmp_arr);
$new_arr = array();
foreach ($tmp_arr as $key => $value) {
$new_arr[] = $data[$key];
}
if (@file_put_contents($file, implode('', $new_arr))) {
echo 'File '.$file.' - SUCCESS<br>';
} else {
echo 'File '.$file.' - ERROR<br>';
}
}
unset($data);
}
}
}

Спасибо. Скрипт рабочий, но выводит не верно.

123

187

1

190

11

а должен вывести вот так:

1

11

123

187

190

LovelAss
На сайте с 05.06.2009
Offline
96
#8

Регулярку замените на


#([0-9]+)#
J
На сайте с 06.07.2011
Offline
160
#9
LovelAss:
Регулярку замените на

#([0-9]+)#

Огромное человеческое спасибо! ;)

B
На сайте с 02.05.2007
Offline
240
#10

EmEditor посмотрите, он может "типа CSV" файл видеть и сортировать по столбцу,

TextPad тоже, но не так очевидно

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий