#!/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;

Oto pierwsze 3 wiersze wyniku, które otrzymuję teraz:

<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>

Te dwa pierwsze znaki powinny znajdować się na KOŃCU wierszy, na przykład:

<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>

Tutaj jest linia łączenia:

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

To jest deklaracja $ estr: my $ estr = '">'; Próbowałem tego w niezliczonych wersjach - to jest tylko aktualna.

Chcę wiedzieć, jak sprawić, by te dwa znaki pojawiały się na końcu wiersza, a nie na początku następnego wiersza.

Pracowałem nad tym godzinami, a także dwie godziny przedwczoraj, próbując przekonać forum do zaakceptowania mojego pytania.

Bardzo dziękuję za wszelką pomoc. Clair

0
clair 1 kwiecień 2020, 12:37

3 odpowiedzi

Najlepsza odpowiedź

Istnieją setki sposobów rozwiązania tego problemu, jednym z nich jest:

$ mylist (przed wydrukowaniem) w twoim przykładzie zawiera:

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

Usunięcie znaku nowego wiersza pomiędzy i dodanie go na końcu łańcucha

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

Naprawi to.

BTW: '> "' na końcu $ last również wydaje się błędne.

0
Georg Mavridis 1 kwiecień 2020, 16:55

Ciąg w $nfilename najwyraźniej kończy się wysuwem wiersza. Czy przeczytałeś wiersz z pliku i zostawiłeś nowy wiersz? chomp można użyć do usunięcia końcowego wysuwu wiersza ze zmiennych.

2
ikegami 1 kwiecień 2020, 09:42

Sprawdź, czy znajdziesz zastosowanie dla następującego kodu.

Wyszukuje pliki JPG w katalogu lokalnym i generuje stronę internetową

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;

Wynik

<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>
0
Polar Bear 1 kwiecień 2020, 17:58