Advertisement

02.22.2008 at 05:40PM PST, ID: 23186420
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Reading a list of files from a directory with perl

Hi guys! Hope you are well and can help.

At the moment i have an index.html file that contains hard coded informaton about a directory called 'img', which contains all my images.
Currently I am manually typing in code into index.html so that when I launch index.html, it displays all my images from this particular folder.

############
OBJECTIVES:
############

What Id like to do is to remove this manual process, because whenever I delete or add images, I have to modify the index.html file to reflect what is currently in in the img folder.
Im using xp and Activestate Perl.
So currently, I have this setup for index.html:

----------------------------------------------------------------------------------------------- index.html
<li>
<a href="#"><img src="img/photo01.jpg" alt="description" /><img src="img/photo01.jpg" alt="description" class="preview" /></a>
</li>
<li>
<a href="#"><img src="img/photo02.jpg" alt="description" /><img src="img/photo02.jpg" alt="description" class="preview" /></a>
</li>
<li>
<a href="#"><img src="img/photo03.jpg" alt="description" /><img src="img/photo03.jpg" alt="description" class="preview" /></a>
</li>

etc
etc

Currently, I have to add the <li>.........</li> for every new image that i add to img folder.
So, if i need to add a new image file, I have to do as per following example. If the new image is photo04.jpg, I have to do the following:

<li>
<a href="#"><img src="img/photo04.jpg" alt="description" /><img src="img/photo04.jpg" alt="description" class="preview" /></a>
</li>

And, again, if i want to add another image file (eg.photo05.jpg), I have to do the following:

<li>
<a href="#"><img src="img/photo05.jpg" alt="description" /><img src="img/photo05.jpg" alt="description" class="preview" /></a>
</li>

You can see from the above, I have to add 3 lines of code for every image manually. The code is exactly the same other than the name of the image file, which only has to be changed in 2 places:
eg.
<img src="img/photo04.jpg"

Id like a way to automate this process using perl.


#############
REQUIREMENTS:
#############

What Id like to do is....


1) Create a perl script which takes 2 arguments:

Syntax:

<perl_script>.pl arg1 arg2

where

arg1 is: full path and DIRECTORY name of the directory you wish to read a list of files

and

arg2 is: full path and FILE name of the file you wish to manipulate and add the required lines of code for every filename returned from arg1

Example would be:

update.pl c:\img c:\folder\folder\index.html

So,

update.pl:

a) reads folder c:\img (arg1) and returns back an array of filename in format:

img/file1.jpg
img/file2.jpg
img/file3.jpg
img/file4.jpg
img/file5.jpg
etc etc

where only the folder/fileX.jpg is stored for each file in the array

b) it then reads the file c:\folder\folder\index.html (arg2)

b)i) the script first checks index.html for the existence of 2 bookmarks in index.html (these 2 bookmarks will always be present)
They are as follows...


<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->     //bookmark1
code
code
code
etc etc
<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->     //bookmark2


b)ii) In the above, the perl script would first remove all lines between

<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->

and


<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->

but leave the 2 bookmarked lines intact.

b)iii) Once the perl script removes all lines/code between

<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->

and


<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->

the script inserts one blank line between these 2 bookmarks.

<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->
<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->

so it would look like:

<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->

<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->

So, now, the blank line above (between the 2 bookmarks) is the starting line where new data is inserted by the perl script as follows...

c) As the perl script now has (an array) a list of filenames from arg1 in the following format:

img/file1.jpg
img/file2.jpg
img/file3.jpg
img/file4.jpg
img/file5.jpg
etc etc

A variable is created for the img src, something like

$imagesource = img/file1.jpg

Starting on the first blank line below the first bookmark in the index.html file,

the following is inserted:

<li>
<a href="#"><img src="$imagesource" alt="description" /><img src="$imagesource" alt="description" class="preview" /></a>
</li>

and $imagesource

is replaced with

img/file1.jpg

so, youd now have in index.html the following.....

<li>
<a href="#"><img src="img/file1.jpg" alt="description" /><img src="img/file1.jpg" alt="description" class="preview" /></a>
</li>

The script then keeps going through the array of filenames and does the same thing, until all filenames have been added to index.html.

For example, next file in the array..

$imagesource = img/file2.jpg

Starting below the first filename (the </li> as inserted from above)

the following is inserted:

<li>
<a href="#"><img src="$imagesource" alt="description" /><img src="$imagesource" alt="description" class="preview" /></a>
</li>

and $imagesource

is replaced with

img/file2.jpg

so, youd now have in index.html the following.....

<li>
<a href="#"><img src="img/file1.jpg" alt="description" /><img src="img/file1.jpg" alt="description" class="preview" /></a>
</li>
<li>
<a href="#"><img src="img/file2.jpg" alt="description" /><img src="img/file2.jpg" alt="description" class="preview" /></a>
</li>

etc etc

until all files in the array have been processed and the required lines inserted into index.html.

So, to sum up,

Every file in the array, would have 3 lines of code inserted into index.html, as follows...

<li>
<a href="#"><img src="img/file1.jpg" alt="description" /><img src="img/file1.jpg" alt="description" class="preview" /></a>
</li>


Any help on this greatly appreciated.

Thank you.
Start your free trial to view this solution
Question Stats
Zone: Programming
Question Asked By: Simon336697
Solution Provided By: ozo
Participating Experts: 2
Solution Grade: A
Views: 43
Translate:
Loading Advertisement...
02.22.2008 at 05:59PM PST, ID: 20963242

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.22.2008 at 06:06PM PST, ID: 20963260

Rank: Sage

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.22.2008 at 07:32PM PST, ID: 20963485

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.22.2008 at 10:29PM PST, ID: 20963892

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
Microsoft
  • Internet Protocols
  • Applications
  • Development
  • OS
  • Hardware
  • Windows Security
Apple
  • Operating Systems
  • Hardware
  • Programming
  • Networking
  • Software
Internet
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Spy / Ad Blockers
  • Web Browsers
  • New Net Users
  • Web Development
  • Chat / IM
  • Anti Spam
  • Web Servers
  • Anti-Virus
  • Email Clients
Gamers
  • Tips
  • Online / MMORPG
  • Puzzle
  • Emulators
  • Action / Adventure
  • Role Playing
  • Consoles
  • Game Programming
  • Strategy
  • Sports
  • Misc
  • Computer Games
Digital Living
  • Hardware
  • Automotive
  • New Net Users
  • New Users
  • Software
  • Digital Music
  • Gaming World
  • Home Security
  • Apple
  • Networking Hardware
Virus & Spyware
  • Vulnerabilities
  • IDS
  • Encryption
  • Anti-Virus
  • Operating Systems Security
  • Software Firewalls
  • WebApplications
  • Cell Phones
  • Operating Systems
  • Internet
  • Hardware Firewalls
Hardware
  • Displays / Monitors
  • Handhelds / PDAs
  • Components
  • Peripherals
  • Laptops/Notebooks
  • Servers
  • Misc
  • Apple
  • Embedded Hardware
  • Networking Hardware
  • Storage
  • Desktops
  • New Users
Software
  • System Utilities
  • Industry Specific
  • Network Management
  • Photos / Graphics
  • Page Layout
  • VMware
  • Misc
  • Web Development
  • OS
  • CYGWIN
  • Voice Recognition
  • Virtualization
  • Message Queue
  • Quality Assurance
  • Security
  • Firewalls
  • MultiMedia Applications
  • Development
  • Database
  • Office / Productivity
  • Business Management
  • OS/2 Apps
  • Server Software
  • Internet / Email
ITPro
  • OS
  • Storage
  • Encryption
  • Operating Systems Security
  • Apple Hardware
  • Laptops & Notebooks
  • Servers
  • Networking Hardware
  • Peripherals
  • Devices
  • Displays / Monitors
  • WebTrends / Stats
  • Search Engines
  • Firewalls
  • Web Computing
  • WebApplications
  • IDS
  • Vulnerabilities
  • Email Clients
  • File Sharing
  • Spy / Ad Blockers
  • Web Browsers
  • Web Servers
  • Networking
  • Anti-Virus
  • Consulting
  • Chat / IM
  • Anti Spam
Developer
  • Web Servers
  • Web Browsers
  • Game Programming
  • Dev Tools
  • Industry Specific
  • Office / Productivity
  • Database
  • CYGWIN
  • Web Development
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Programming
  • Content Management
  • Application Servers
  • Protocols
Storage
  • Removable Backup Media
  • Storage Technology
  • Servers
  • Grid
  • Remote Access
  • Backup / Restore
  • Misc
  • Hard Drives
OS
  • Miscellaneous
  • Security
  • Development
  • Linux
  • VMware
  • MainFrame OS
  • Unix
  • Apple
  • OS / 2
  • AS / 400
  • BeOS
  • Microsoft
  • VMS / OpenVMS
Database
  • Oracle
  • Miscellaneous
  • MySQL
  • Software
  • Sybase
  • Contact Management
  • PostgreSQL
  • Data Manipulation
  • Clarion
  • InterSystems Cache
  • Siebel
  • MUMPS
  • OLAP
  • SQLBase
  • SAS
  • GIS & GPS
  • 4GL
  • Berkeley DB
  • DB2
  • Informix
  • Interbase / Firebird
  • FoxPro
  • Reporting
  • LDAP
  • Filemaker Pro
  • MS SQL Server
  • dBase
  • MS Access
Security
  • Misc
  • Web Browsers
  • Software Firewalls
  • Operating Systems Security
  • File Sharing
  • Spy / Ad Blockers
  • Vulnerabilities
  • WebApplications
  • IDS
  • Anti-Virus
  • Encryption
  • Anti Spam
  • Email Clients
  • VPN
  • Chat / IM
Programming
  • Editors IDEs
  • Installation
  • Handhelds / PDAs
  • Multimedia Programming
  • System / Kernel
  • Automation
  • Algorithms
  • Game
  • Signal Processing
  • Project Management
  • Open Source
  • Database
  • Misc
  • Languages
  • Processor Platforms
  • Theory
Web Development
  • Scripting
  • Blogs
  • Web Servers
  • Software
  • Search Engines
  • Web Graphics
  • Web Services
  • Images
  • Internet Marketing
  • Images and Photos
  • Components
  • Document Imaging
  • Web Languages/Standards
  • Illustration
  • WebApplications
  • Fonts
  • WebTrends / Stats
  • Authoring
  • Digital Camera Software
  • Miscellaneous
Networking
  • Protocols
  • Apple Networking
  • Network Management
  • Message Queue
  • Application Servers
  • Content Management
  • File Servers
  • Email Servers
  • Misc
  • Java Editors & IDEs
  • Wireless
  • Networking Hardware
  • Backup / Restore
  • System Utilities
  • ISPs & Hosting
  • Web Servers
  • Storage Technology
  • Removable Backup Media
  • Servers
  • Web Computing
  • Broadband
  • Grid
  • OS / 2
  • Novell Netware
  • Unix Networking
  • Windows Networking
  • Security
  • Telecommunications
  • Operating Systems
  • Linux Networking
Other
  • Lounge
  • Business Travel
  • Community Support
  • New Net Users
  • Philosophy / Religion
  • Math / Science
  • Miscellaneous
  • URLs
  • Expert Lounge
  • Politics
  • Puzzles / Riddles
  • Automotive
Community Support
  • Suggestions
  • New to EE
  • New Topics
  • CleanUp
  • Announcements
  • General
  • Feedback
  • Input
  • EE Bugs
 
02.22.2008 at 05:59PM PST, ID: 20963242

Rank: Genius

#!/usr/bin/perl
my $dir = shift;
chdir($dir) or warn $!;
($prefix = $dir) =~ s/.*[\/\\]//;
my $i=join'',map{qq(
<li>
<a href="#"><img src="$prefix/$_" alt="description" /><img src="$prefix/$_" alt="description" class="preview" /></a>
</li>
)} <*.jpg>;

$^I=".bak";
$/='<!-- REMOVE EVERYTHING ABOVE THIS LINE BUT LEAVE THIS LINE INTACT -->';
while( <> ){
      s/(<!-- REMOVE EVERYTHING BELOW THIS LINE BUT LEAVE THIS LINE INTACT -->.*)[\s\S]*($\/)/$1$i$2/;
      print;
}
Accepted Solution
 
02.22.2008 at 06:06PM PST, ID: 20963260

Rank: Sage

Are you viewing the HTML page via a web server or opening it directly in the browser?
Assisted Solution
 
02.22.2008 at 07:32PM PST, ID: 20963485
Hi Tintin!

Tintin im doing this locally on my pc and viewing the html page directly in the browser, not via a web server.
 
02.22.2008 at 10:29PM PST, ID: 20963892
Ozo that is incredible code and it works fantastic!!!
Thanks so much guys.

S
 
 
20080236-EE-VQP-29 / EE_QW_2_20070628