Хобрук: Ваш путь к мастерству в программировании

perl добавить двойную кавычку и правую угловую скобку в конце соединения

#!/usr/bin/perl -w
# prints dir list of .jpg filenames to screen
# and adds HTML markup for flexbox

use strict;
use warnings;
use Text::Autoformat;
my $file;
my $nfilename;
my $first = '<img src="';
my $last = '" style="width:100%"> ';
my $title = 'title = "';
my $estr = '">';
my $dir = "/home/clair/cp-perl/";
my $mylist;
opendir(DIR, $dir) or die $!;

while ($file = readdir(DIR)) {

# Use a regular expression to ignore files beginning with a period
next if ($file =~ m/^\./);
next if (substr $file, -1) ne "g";

#***************************************
# get rid of extension and replace hyphen with space   

$nfilename=$file;
$nfilename=~s/.jpg//;
$nfilename =~ s/-/ /g;

# ****************************************
#capitalizewords in filename to be a title

my $formatted = autoformat $nfilename, { case => 'highlight' };

chomp($nfilename);

# ****************************************
$mylist = join("",$first, $file, $last, $title, $nfilename, $estr);

# ************************* 
# thanks to George Mavridis - stackoverflow
$mylist =~ s/[\r\n]+//;
$mylist .="\n";
# *************************

print $mylist;

}
closedir(DIR);
exit 0;

Это первые 3 строки вывода, которые я получаю сейчас:

<pre>
<img src="out-of-the-night.jpg" style="width:100%"> title = "Out of the Night
"><img src="homage-to-borgeson.jpg" style="width:100%"> title = "Homage to Borgeson
"><img src="autumn-in-vermont.jpg" style="width:100%"> title = "Autumn in Vermont
</pre>

Эти первые два символа должны быть в КОНЦЕ строк, например:

<pre>
<img src="out-of-the-night-sm.jpg" style="width:100%"> title = "Out of the Night">
<img src="homage-to-borgeson.jpg" style="width:100%"> title = "Homage to Borgeson">
<img src="autumn-in-vermont-sm.jpg" style="width:100%"> title = "Autumn in Vermont">
</pre>

вот строка соединения:

$mylist = join("",$first, $file, $last, $title, $nfilename, $estr);
print $mylist;

Это объявление $estr: my $estr = '">'; я пробовал бесчисленное количество вариантов этого - это только текущий.

Я хочу знать, как заставить эти два символа отображаться в КОНЦЕ строки, а не в начале следующей строки.

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

Большое спасибо за любую помощь. Клэр

01.04.2020

Ответы:


1

Есть сотни способов решить эту проблему, один из них:

$mylist (перед его печатью) в вашем примере содержит:

<img src="out-of-the-night.jpg" style="width:100%"> title = "Out of the Night
">

удаление перевода строки между ними и добавление его в конец строки

$mylist =~ s/[\r\n]+//;
$mylist .="\n";

исправить бы это.

Кстати: '> "' в конце $last также кажется неправильным.

01.04.2020
  • Джордж -- Большое спасибо. 01.04.2020
  • Теперь у меня есть идеальные строки, которые можно вставить во flexbox ‹div› благодаря вам — и ДА, конец $last завершает фразу CSS ‹style=width=100%›. (Я написал это, чтобы сильно научить печатать, и он делает это в пиках. 01.04.2020

  • 2

    Строка в $nfilename, по-видимому, заканчивается переводом строки. Вы прочитали строку из файла и оставили перевод строки? chomp можно использовать для удаления завершающего перевода строки из переменных.

    01.04.2020
  • Недавно у меня был Zstroke, который уничтожил 3 пальца на левой руке - трудно печатать, поэтому этот скрипт сэкономит мне много времени. Я художник и буду делать страницы гранок для отображения изображений. Вы можете создать пригодный для использования directpru с такими записями, как x-1.jpg, x-2.jpg и т. д., который будет работать — просто измените переменную $dir. 01.04.2020

  • 3

    Пожалуйста, посмотрите, найдете ли вы применение для следующего кода.

    Он ищет файлы JPG в локальном каталоге и создает веб-страницу.

    use strict;
    use warnings;
    use feature 'say';
    
    my $dir = '.';
    my @files;
    
    push @files, $_ while glob('*.jpg');
    
    my $title = 'Pictures in JPEG format';
    my $space = "\n\t\t\t";
    my $style = 'width:100%';
    
    my $html  = '
    <html>
        <head>
            <title>$title</title>
        </head>
        <body>';
    
    for (@files) {
        /(.*?)\.jpg/;
        my $title = $1;
        $title =~ s/[-_]/ /g;
        $html .= "$space title = \"\u$title\"";
        $html .= "$space<img src=\"$_\" style=\"$style\">";
    }
    
    $html .= '
        </body>
    </html>';
    
    say $html;
    

    Выход

    <html>
            <head>
                    <title>Pictures in JPEG format</title>
            </head>
            <body>
                             title = "File 08"
                            <img src="file-08.jpg" style="width:100%">
                             title = "File 09"
                            <img src="file-09.jpg" style="width:100%">
                             title = "File 01"
                            <img src="file_01.jpg" style="width:100%">
                             title = "File 02"
                            <img src="file_02.jpg" style="width:100%">
                             title = "File 03"
                            <img src="file_03.jpg" style="width:100%">
            </body>
    </html>
    
    01.04.2020
    Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..