Это можно сделать с помощью одного текстового элемента, который циклически изменяет свое содержимое с интервалом в 1 секунду. Обратите внимание, что я использую оператор модуля, чтобы пропустить цикл по массиву (в противном случае вы можете остаться с неопределенным, когда число превысило массив длина.
Обратите внимание, что вы можете установить это как переменную, а затем использовать clearInterval (переменная); чтобы остановить цикл.
У меня также нет анимации затухания, но шляпа должна быть легкой включить.
var content = ['This is text content 1',' This is another text content', 'I am also a text content'];
let contentLength = content.length;
let count=0;
function contentDisplay (){
document.querySelector('#content').innerText = content[count % contentLength];
count++;
}
// sets the initial display
contentDisplay();
// sets the interval to change the display
setInterval(contentDisplay, 1000);
#content {
text-align: center;
padding: 15px;
font-size: 20px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="content">text 1</p>
Это походит на задание для File::Find::Rule:
#!/usr/bin/perl
use strict;
use warnings;
use autodie; # Causes built-ins like open to succeed or die.
# You can 'use Fatal qw(open)' if autodie is not installed.
use File::Find::Rule;
use Getopt::Std;
use constant SECONDS_IN_DAY => 24 * 60 * 60;
our %option = (
m => 1, # -m switch: days ago modified, defaults to 1
o => undef, # -o switch: output file, defaults to STDOUT
);
getopts('m:o:', \%option);
# If we haven't been given directories to search, default to the
# current working directory.
if (not @ARGV) {
@ARGV = ( '.' );
}
print STDERR "Finding files changed in the last $option{m} day(s)\n";
# Convert our time in days into a timestamp in seconds from the epoch.
my $last_modified_timestamp = time() - SECONDS_IN_DAY * $option{m};
# Now find all the regular files, which have been modified in the last
# $option{m} days, looking in all the locations specified in
# @ARGV (our remaining command line arguments).
my @files = File::Find::Rule->file()
->mtime(">= $last_modified_timestamp")
->in(@ARGV);
# $out_fh will store the filehandle where we send the file list.
# It defaults to STDOUT.
my $out_fh = \*STDOUT;
if ($option{o}) {
open($out_fh, '>', $option{o});
}
# Print our results.
print {$out_fh} join("\n", @files), "\n";
Где проблема решена главным образом стандартными библиотеками, используют их.
File::Find в этом патронажные работы приятно.
Может быть много способов сделать вещи в жемчуге, но где очень стандартная библиотека существует, чтобы сделать что-то, она должна быть использована, если она не имеет проблемы сами по себе.
#!/usr/bin/perl
use strict;
use File::Find();
File::Find::find( {wanted => \&wanted}, ".");
sub wanted {
my (@stat);
my ($time) = time();
my ($days) = 5 * 60 * 60 * 24;
@stat = stat($_);
if (($time - $stat[9]) >= $days) {
print "$_ \n";
}
}
File::Find является правильным способом решить эту проблему. Там бесполезен в перереализации материала, который уже существует в других модулях, но перереализации чего-то, что находится в стандартном модуле, нужно действительно препятствовать.
Нет шести способов сделать это, существует старый путь и новый путь. Старый путь с File::Find, и у Вас уже есть несколько примеров этого. File::Find имеет довольно ужасный интерфейс обратного вызова, это было прохладно 20 лет назад, но мы шли дальше с тех пор.
Вот реальная жизнь (слегка исправлена) программа, которую я использую для убирания хлама на одном из моих рабочих серверов. Это использует File::Find::Rule, а не File::Find. File::Find::Rule имеет хороший декларативный интерфейс, который читает легко.
Randal Schwartz также записал File::Finder как обертка по File::Find. Это довольно хорошо, но это действительно не взлетело.
#! /usr/bin/perl -w
# delete temp files on agr1
use strict;
use File::Find::Rule;
use File::Path 'rmtree';
for my $file (
File::Find::Rule->new
->mtime( '<' . days_ago(2) )
->name( qr/^CGItemp\d+$/ )
->file()
->in('/tmp'),
File::Find::Rule->new
->mtime( '<' . days_ago(20) )
->name( qr/^listener-\d{4}-\d{2}-\d{2}-\d{4}.log$/ )
->file()
->maxdepth(1)
->in('/usr/oracle/ora81/network/log'),
File::Find::Rule->new
->mtime( '<' . days_ago(10) )
->name( qr/^batch[_-]\d{8}-\d{4}\.run\.txt$/ )
->file()
->maxdepth(1)
->in('/var/log/req'),
File::Find::Rule->new
->mtime( '<' . days_ago(20) )
->or(
File::Find::Rule->name( qr/^remove-\d{8}-\d{6}\.txt$/ ),
File::Find::Rule->name( qr/^insert-tp-\d{8}-\d{4}\.log$/ ),
)
->file()
->maxdepth(1)
->in('/home/agdata/import/logs'),
File::Find::Rule->new
->mtime( '<' . days_ago(90) )
->or(
File::Find::Rule->name( qr/^\d{8}-\d{6}\.txt$/ ),
File::Find::Rule->name( qr/^\d{8}-\d{4}\.report\.txt$/ ),
)
->file()
->maxdepth(1)
->in('/home/agdata/redo/log'),
) {
if (unlink $file) {
print "ok $file\n";
}
else {
print "fail $file: $!\n";
}
}
{
my $now;
sub days_ago {
# days as number of seconds
$now ||= time;
return $now - (86400 * shift);
}
}
Мой предпочтительный метод состоит в том, чтобы использовать модуль File::Find в качестве так:
use File::Find;
find (\&checkFile, $directory_to_check_recursively);
sub checkFile()
{
#examine each file in here. Filename is in $_ and you are chdired into it's directory
#directory is also available in $File::Find::dir
}
Существует мой File::Finder, как уже упомянуто, но существует также мое iterator-as-a-tied-hash решение от Нахождения Файлов Инкрементно (Журнал Linux).
Другие упомянули File::Find, который является путем, которым я пошел бы, но Вы попросили итератор, который File::Find не (ни File::Find::Rule). Вы могли бы хотеть посмотреть на File::Next или File::Find::Object, который действительно имеет повторяющиеся интерфейсы. Mark Jason Dominus пробегается через создание Вашего собственного в главе 4.2.2 Perl Высшего порядка.
Я записал File::Find::Closures как ряд закрытий, которые можно использовать с File::Find, таким образом, Вы не должны писать свое собственное. Существует несколько функций mtime, которые должны обработать
use File::Find; use File::Find::Closures qw(:all); my( $wanted, $list_reporter ) = find_by_modified_after( time - 86400 ); #my( $wanted, $list_reporter ) = find_by_modified_before( time - 86400 ); File::Find::find( $wanted, @directories ); my @modified = $list_reporter->();
Вы не должны действительно использовать модуль, потому что я главным образом разработал его как способ, которым Вы могли посмотреть на код и украсть части, которые Вы хотели. В этом случае это немного более хитро, потому что все подпрограммы, которые имеют дело со статистикой, зависят от второй подпрограммы. Вы быстро получите идею из кода все же.
Удачи,
Я - riskying для получения downvoted, но по моему скромному мнению 'ls' (с соответствующими параметрическими усилителями) команда делает это самым известным производительным способом. В этом случае это могло бы быть довольно хорошее решение для передачи по каналу 'ls' от кода жемчуга до оболочки, возвратив результаты массиву или хешу.
Править: Это могла также быть используемая 'находка', как предложено в комментариях.
Я пишу подпрограмму, которая читает каталог с readdir
, выводит "." и ".." каталоги, рекурсивно вызывает, если это найдет новый каталог и исследует файлы на то, что я ищу (в Вашем случае, то Вы захотите использовать utime
или stat
). Ко времени сделана рекурсия, каждый файл должен был быть исследован.
Я думаю все функции, в которых Вы нуждались бы для этого сценария, описаны кратко здесь: http://www.cs.cf.ac.uk/Dave/PERL/node70.html
Семантика ввода и вывода является довольно тривиальным осуществлением, которое я оставлю Вам.