powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Получить данные с двух последних добавленных файлов
18 сообщений из 18, страница 1 из 1
Получить данные с двух последних добавленных файлов
    #38490435
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте, форумчане
есть папка со списком файлов вида - d.m.Y.csv
подскажите, как открыть два новейших исходя из их дат в имени?
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38490640
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать список файлов, преобразовать дату в юникстайм и делать ее ключом ассоциативного массива, а имя файла - значением.
Отсортировать массив по ключам.
Взять из массива два нужных элемента.
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491540
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил. спасибо

Решение
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php
$i=1;
$base = opendir('/analytics');
while (false !== ($file = readdir($base))) { 

	if (substr(strrchr($file, '.'), 1) == 'csv') {
		$files[]=strtotime(basename($file, ".csv").PHP_EOL);
	}
}
rsort($files);
$file = date('d.m.Y', $files[0]);

$row = 1;
$handle = fopen("/analytics/".$file.".csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
    }
    $row++;
}
fclose($handle);

?>


...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491544
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вторая часть кода после сорта не относится к поставленной задаче, если что.
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491548
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slojnokak,

если это ваши файлы, то складывайте их в формате Y.m.d.csv
тогда можно просто брать первые два файла, при сканировании
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491551
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

точнее наоборот ) в конце будут
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491555
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u, да, это было бы очень простое решение) ну да ладно. уже решено. да и пришлось бы заморачиваться все равно преобразованием даты, т.к. из мне нужно выводить её на странице в правильном формате d m Y получаемой из названия файла
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491581
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uточнее наоборот ) в конце будутУвы, такое решение не работает стабильно.
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491689
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторif (substr(strrchr($file, '.'), 1) == 'csv') {
http://php.net/manual/ru/function.pathinfo.php
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491795
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slojnokakr u, да, это было бы очень простое решение) ну да ладно. уже решено. да и пришлось бы заморачиваться все равно преобразованием даты, т.к. из мне нужно выводить её на странице в правильном формате d m Y получаемой из названия файла
Сохраняйте в формате <timestamp>.csv
И найти легко будет новые, да и при выводе всего лишь надо будет date() применить
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38491837
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забавные вы ребята
когда решения не было - все молчали. когда решил - навалились с поправками ахаха)
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38492129
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
появилась проблемка
из полученных данных вида хххх-уууу (х,у числа. макс и мин сумма) нужно было вытянуть числа до и после '-'
вот мой код
Код: php
1.
2.
3.
4.
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
        list ($analytic[$row][$c]['min'], $analytic[$row][$c]['max']) = split ('[/.-]', $data[$c]);
    }


по идее все правильно, но присваивается не число не целиком, а только его первая цифра. т.е. например из 9490 присваивается только '9'.
до этого использовал explode, но эффект тот же.
Код: php
1.
2.
3.
        $array = explode ('-', $data[$c]);
        $analytic[$row][$c]['min']=$array[0];
        $analytic[$row][$c]['max']=$array[1];


но в этом случае, при выводе в самом цикле переменной $array[0] или 1 число выводится целиком.
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38492330
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой тестовый пример с реальными данными был бы более показателен, нежели отрывок кода, что выдернут из контекста скрипта. А вообще, точка в классе кажется лишней. По идее, она и дает разбивку по одному символу.

Ну и вдогонку: пора уже завязывать со split по вполне понятным причинам.
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38493109
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slojnokakрешил. спасибо

Решение
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php
$i=1;
$base = opendir('/analytics');
while (false !== ($file = readdir($base))) { 

	if (substr(strrchr($file, '.'), 1) == 'csv') {
		$files[]=strtotime(basename($file, ".csv").PHP_EOL);
	}
}
rsort($files);
$file = date('d.m.Y', $files[0]);

$row = 1;
$handle = fopen("/analytics/".$file.".csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
    }
    $row++;
}
fclose($handle);

?>




Код: perl
1.
2.
3.
4.
#  если компоненты даты в имени файла с ведущими нулями ( 01.01.2012.csv ),
# тогда вывод имен двух самых поздних файлов может быть осуществлен вот такой простенькой командой:

perl -E ' say  join v10, ( sort {  $a =~ s/^ (\d+) [.] (\d+) [.] (\d+)/$3$2$1/rx cmp $b =~ s/^ (\d+) [.] (\d+) [.] (\d+)/$3$2$1/rx  }  glob "*.csv" )[-1,-2]'
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38493112
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volodin661slojnokakрешил. спасибо

Решение
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php
$i=1;
$base = opendir('/analytics');
while (false !== ($file = readdir($base))) { 

	if (substr(strrchr($file, '.'), 1) == 'csv') {
		$files[]=strtotime(basename($file, ".csv").PHP_EOL);
	}
}
rsort($files);
$file = date('d.m.Y', $files[0]);

$row = 1;
$handle = fopen("/analytics/".$file.".csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
    }
    $row++;
}
fclose($handle);

?>




Код: perl
1.
2.
3.
4.
#  если компоненты даты в имени файла с ведущими нулями ( 01.01.2012.csv ),
# тогда вывод имен двух самых поздних файлов может быть осуществлен вот такой простенькой командой:

perl -E ' say  join v10, ( sort {  $a =~ s/^ (\d+) [.] (\d+) [.] (\d+)/$3$2$1/rx cmp $b =~ s/^ (\d+) [.] (\d+) [.] (\d+)/$3$2$1/rx  }  glob "*.csv" )[-1,-2]'




Код: perl
1.
2.
3.
4.
#  а если ведущих нулей нет, то придётся применить преобразование Шварца ( map-sort-map),
#  что слегка подлиннее зато правильно с точки зрения гармонии мира. 

perl -E ' say  join v10, ( map {$_->[0]} sort{ $a->[3]<=>$b->[3] or $a->[2]<=>$b->[2] or $a->[1]<=>$b->[1] } map {[$_, /^(\d+) [.] (\d+) [.] (\d+)/x ]}  glob "*.csv" )[-1,-2]'
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38493590
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slojnokakздравствуйте, форумчане
есть папка со списком файлов вида - d.m.Y.csv
подскажите, как открыть два новейших исходя из их дат в имени?

Или,
используя старый добрый модуль из CPAN Sort::Fields
для сортировки по разным полям:

Код: perl
1.
2.
3.
4.
5.
6.
7.
 

 perl -E ' use Sort::Fields;  say  join v10,  ( fieldsort q([.]), [ "3n", "2n", "1n" ],  glob "*.csv"  )[-1,-2] '
                                                             ^       ^      ^     ^
___ точка в качестве разделителя для split __________________|       |______|_____|
               
_____  номера полей для числовой (n) сортировки ____________________________|
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38493696
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так и не решил.
весь код

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<?php
$i=1;
$base = opendir('analytics');
while (false !== ($file = readdir($base))) { 

	if (substr(strrchr($file, '.'), 1) == 'csv') {
		$files[]=strtotime(basename($file, ".csv").PHP_EOL);
	}
}
rsort($files);
$file = date('d.m.Y', $files[0]);
$fileold = date('d.m.Y', $files[1]);

$row = 1;
$handle = fopen("analytics/".$file.".csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
        $array = explode ('-', $data[$c]);
        $analytic[$row][$c]['min']=$array[0];
        $analytic[$row][$c]['max']=$array[1];
    }
    $row++;
}
echo $analytic[3][1].'
';
print $analytic[3][1]['max'];
fclose($handle);

?>



файл csv содержит простую таблицу.
ячейки "min" & "max" массива "$analytic" содержат только первый символ числа. проблему не решил
...
Рейтинг: 0 / 0
Получить данные с двух последних добавленных файлов
    #38494202
slojnokak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slojnokakтак и не решил.
весь код

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<?php
$i=1;
$base = opendir('analytics');
while (false !== ($file = readdir($base))) { 

	if (substr(strrchr($file, '.'), 1) == 'csv') {
		$files[]=strtotime(basename($file, ".csv").PHP_EOL);
	}
}
rsort($files);
$file = date('d.m.Y', $files[0]);
$fileold = date('d.m.Y', $files[1]);

$row = 1;
$handle = fopen("analytics/".$file.".csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
        $analytic[$row][$c]=$data[$c];
        $array = explode ('-', $data[$c]);
        $analytic[$row][$c]['min']=$array[0];
        $analytic[$row][$c]['max']=$array[1];
    }
    $row++;
}
echo $analytic[3][1].'
';
print $analytic[3][1]['max'];
fclose($handle);

?>



файл csv содержит простую таблицу.
ячейки "min" & "max" массива "$analytic" содержат только первый символ числа. проблему не решил


$array[0]=9450
$analytic[$row][$c]['min']=$array[0]
echo $analytic[$row][$c]['min'] /// 9
????
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Получить данные с двух последних добавленных файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]