Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Получить данные с двух последних добавленных файлов / 18 сообщений из 18, страница 1 из 1
05.12.2013, 15:20
    #38490435
slojnokak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
здравствуйте, форумчане
есть папка со списком файлов вида - d.m.Y.csv
подскажите, как открыть два новейших исходя из их дат в имени?
...
Рейтинг: 0 / 0
05.12.2013, 16:41
    #38490640
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
Читать список файлов, преобразовать дату в юникстайм и делать ее ключом ассоциативного массива, а имя файла - значением.
Отсортировать массив по ключам.
Взять из массива два нужных элемента.
...
Рейтинг: 0 / 0
06.12.2013, 12:22
    #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
06.12.2013, 12:23
    #38491544
slojnokak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
Вторая часть кода после сорта не относится к поставленной задаче, если что.
...
Рейтинг: 0 / 0
06.12.2013, 12:26
    #38491548
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
slojnokak,

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

точнее наоборот ) в конце будут
...
Рейтинг: 0 / 0
06.12.2013, 12:30
    #38491555
slojnokak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
r u, да, это было бы очень простое решение) ну да ладно. уже решено. да и пришлось бы заморачиваться все равно преобразованием даты, т.к. из мне нужно выводить её на странице в правильном формате d m Y получаемой из названия файла
...
Рейтинг: 0 / 0
06.12.2013, 12:42
    #38491581
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
r uточнее наоборот ) в конце будутУвы, такое решение не работает стабильно.
...
Рейтинг: 0 / 0
06.12.2013, 13:33
    #38491689
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
авторif (substr(strrchr($file, '.'), 1) == 'csv') {
http://php.net/manual/ru/function.pathinfo.php
...
Рейтинг: 0 / 0
06.12.2013, 14:13
    #38491795
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
slojnokakr u, да, это было бы очень простое решение) ну да ладно. уже решено. да и пришлось бы заморачиваться все равно преобразованием даты, т.к. из мне нужно выводить её на странице в правильном формате d m Y получаемой из названия файла
Сохраняйте в формате <timestamp>.csv
И найти легко будет новые, да и при выводе всего лишь надо будет date() применить
...
Рейтинг: 0 / 0
06.12.2013, 14:32
    #38491837
slojnokak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
забавные вы ребята
когда решения не было - все молчали. когда решил - навалились с поправками ахаха)
...
Рейтинг: 0 / 0
06.12.2013, 17:12
    #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
06.12.2013, 19:37
    #38492330
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить данные с двух последних добавленных файлов
Простой тестовый пример с реальными данными был бы более показателен, нежели отрывок кода, что выдернут из контекста скрипта. А вообще, точка в классе кажется лишней. По идее, она и дает разбивку по одному символу.

Ну и вдогонку: пора уже завязывать со split по вполне понятным причинам.
...
Рейтинг: 0 / 0
08.12.2013, 06:11
    #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
08.12.2013, 06:52
    #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
09.12.2013, 06:46
    #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
09.12.2013, 10:11
    #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
09.12.2013, 15:23
    #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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Получить данные с двух последних добавленных файлов / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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