Hi, I am trying to create a hash and one element is an array. The hash comes from a csv file.
I use $/ = ",\"\"\n" because there is a new line in each record. The first 4 elements of each record are always the same and these are easily assigned to the hash. After that there are 20 other fields (keywords) for the record, some blank (that I'd rather discard). I have 2 problems. One is looping through each record and managing to loop through $fields[4-20] while assigning them to an array. Two, is the reverse, accessing the array elements while printing/looping through the hash. I know a reference is needed here but my attempt at using the cookbook have failed me. Below is what I have done so far and some sample data. If anyone has the time any advice would be appreciated. Thanx, Dp. ============== perl script #!/bin/perl use strict; # Open a cvs file and put contents into images. # File should have fields in this following order: # 1, SPLNUM 2, Photographer, 3, Title, 4, Credit and captions, # 5, keywords. my ($l,$i,$k,$v,$w); # Predefined global variables; my %headers; my (@words); $/ = ",\"\"\n"; # This defines the record separator as # ,""\n. Note: the csv file will have a newline # between the credit line and the caption. my $infile = shift; # Input file open(FH,"$infile") or die "Can't open $infile: $!\n"; # Read in the file, a record at a time. while (defined($i = <FH>) ) { #print "Record $. = $i\n"; # parse_csv (stolen from a book) takes care of any # unusual characters that might appear in the keywords # such as commas, &, [ ...etc. my @lines = parse_csv($i); # print "\$lines[0] = $lines[0]\n"; # Fields 0,1,2,3 are all pre-defined. 0 => number, 1 => photog, # 2 => title, 3 => credit and caption, 4 and on => keywords. $headers{'splnum'} = $lines[0]; $headers{'photog'} = $lines[1]; $headers{'title'} = $lines[2]; ($headers{'credit'}) = ($lines[3] =~ /CREDIT: (.*\/.*RARY)/); (my $cap) = ($lines[3] =~ /.RARY.(.*)/s); (my $caption = $cap) =~ s/\n//g; # Throw away any extra newlines. ($headers{'caption'}) = ($caption); # The rest of the fields in the records will be keywords and these may # vary in number but there shouldn't be more than 20. my $sizeof = 4; my ($d,$keyw_ref); my @keywords; for ($d = 4; $d <= 20; ++$d ) { print "\$lines = $lines[$d] \$sizeof = $sizeof\n"; push(@keywords,$lines[$sizeof]); } $keyw_ref = [EMAIL PROTECTED]; $headers{'keywords'} = $keyw_ref; # Print the hash keys and values so I can see if everything has been # assigned correctly while ( ($k,$v) = each %headers ) { if ( $k =~ /keywords/ ) { my $item; foreach $item (@$keyw_ref) { print "$item\n"; } i # End of foeach $item } # End of if print "$k => $v\n"; } # End of while } # End of mail while. # ==== SUBS ===== sub parse_csv { my $text = shift; my @new = (); push(@new, $+) while $text =~ m{ "([^\"\\]*(?:\\.[^\"\\]*)*)",? | ([^,]+),? | , }gx; #push(@new, undef) if substr($text, -1,1) eq ','; # omitted this as I hoped to discard the # empty fields. return @new; } ========== Sampe data ======== "A020/002","JCO","Moulded resistors in synthetic resin","CREDIT: JEAN COLLOMBET/SCIENCE PHOTO LIBRARY Moulded resistors in synthetic resin, achain of which forms the link between the power supply & in the electrostatic separator.","MOULDED RESISTORS","RESISTOR, MOULDED","PHYSICS","ATOMIC PHYSICS RESEARCH","","","","","","","","","","","","","","","","" "E779/061","DSC","False-colour SEM of a mite attacking a whitefly","CREDIT: DAVID SCHARF/SCIENCE PHOTO LIBRARY False-colour scanning electron micrograph (SEM) of a predator mite attacking a whitefly. Played out on the hairy surface of a leaf, this predatorial species of mite (at top) has effectively immobili- zed the whitefly lying beneath it in its grasp, and has begun to devour the whitefly flesh. In warmer countries, many species of whitefly are of economic significance as despoilers of plants and fruit. As a control, research into their natural predators is being conducted, rather than using chemical insecticides. Predator mites, related to the spider, may be bred specifically to combat the problem of whitefly infestations of economically important plants. Magnification: x18 at 35mm size.","WHITEFLY, ATTACKED BY MITE","MITE, ATTACKING WHITEFLY","PREDATOR, MITE ON WHITEFLY","BIOLOGICAL PEST CONTROL","PEST CONTROL, BIOLOGICAL","WHITEFLY, PEST CONTROL","MITE, PEST CONTROL","","","","","","","","","","","","","" "E779/007","MDO","Orange predatory mite attacks spider mite","CREDIT: MARTIN DOHRN/SCIENCE PHOTO LIBRARY Biological pest control: orange predatory mite (Phytoseiulus persimilis) attacks spider mite (Tetranychus urticae), a pest of bean plants. The predatory mites are commercially bred for the biological control of the pest mites. (7/84)","MITE","RED SPIDER MITE","SPIDER MITE","BIOLOGICAL PEST CONTROL","PEST CONTROL, BIOLOGICAL","PHYTOSEIULUS PERSIMILIS","TETRANYCHUS URTICAE","","","","","","","","","","","","","" "T395/024","PMZ","SEM of microresonator with mite (Acarimetaseiulus)","CREDIT: PETER MENZEL/SCIENCE PHOTO LIBRARY Scanning electron micrograph (SEM) of a mite (Acarimetaseiulus occidentalis) on the surface of a silicon micro-resonator 'chip'. The micro- resonator, or 'semaphore structure', is a product of micromechanics, where mechanical devices are manufactured by successive deposition of thin layers of silicon. Such micro- resonators are used in engineering to make tiny vibration sensors. Only the comb-like detector end of the micro- resonator is seen here, the thin strand of silicon running out of frame in the top left is attatched to alarge resonant mass. To give an idea of scale, the silicon strand is 2 microns thick and 2 microns wide.","MICROMECHANICS","MICRO-RESONATOR","MITE, ON SILICON CHIP","ACARIMETASEIULUS OCCIDENTALIS","NANOTECHNOLOGY","MITE, TYPE, ACARIMETASEIULUS","TECHNOLOGY, NANOTECHNOLOGY","MICROMECHANICS, NANO, MICRO","MICROMECHANICAL, MECHANICAL","","","","","","","","","","","" "A850/189","AFM","Biodegradable plastic parts in compost","CREDIT: ASTRID & HANNS-FRIEDER MICHLER/SCIENCE PHOTO LIBRARY Biodegradable plastic parts (red and white) decomposing in a compost. These plastics are made mainly from plants. Biodegradable materials can be broken down by organisms like soil bacteria.","HORIZONTAL","BIODEGRADABLE","PLASTIC PART, PARTS, PLASTICS","COMPOST","PLANT","ENVIRONMENTALLY- FRIENDLY","MATERIAL","DECOMPOSING, DECOMPOSITION","EARTH, SOIL","CHEMISTRY, CHEMICAL","COMPOUND, COMPOUNDS","SYNTHETIC MATERIAL, MATERIALS","","","","","","","","" "B250/773","OME","Colour SEM of fungal fruiting body in compost heap","CREDIT: EYE OF SCIENCE/SCIENCE PHOTO LIBRARY Compost fungi. Coloured scanning electron micrograph of the fruiting bodies of a fungus growing in a compost heap. Compost is made by allowing a heap of vegetable trimmings, non- seeding weed plants and grass mowings to degrade. The resulting brown, crumbly compost is dug into soil to provide plants with nutrients. Saprophytic fungi play an important role in the degradation of the plant material. Here, hyphae (long) and fruiting bodies (round) of a saprophytic fungus are seen. The fruiting bodies contain the spores. Magnification: x1,000 at 6x6cm size.","COMPOST, FAUNA AND FLORA","SAPROPHYTE, COMPOST HEAP","FUNGUS, COMPOST HEAP","MOULD, COMPOST HEAP","SAPROPHYTIC FUNGI, COMPOST","HYPHAE, MOULD, COMPOST HEAP","SEM","SCANNING ELECTRON MICROGRAPH","NATURE, BOTANY, MYCOLOGY","FUNGUS, FUNGI, FUNGAL","","","","","","","","","","" "Z340/416","OME","Colour SEM of dipteran fly maggot in compost heap","CREDIT: EYE OF SCIENCE/SCIENCE PHOTO LIBRARY Maggot in compost. Coloured scanning electron micrograph of a dipteran fly maggot in a compost heap. Compost is made by stacking plant remains in a heap. The remains degrade to a crumbly brown compost which when dug into soil provides plant nutrients. The maggot is the larval stage in the metamorphosis of a fly from egg to adult. Eggs are laid in compost heaps as the rotting vegetation provides the hatching maggots with abundant food. The maggot is segmented; the mouth end (dark brown) tapers into a thin wedge with two mouth hooks to stabilise the maggot on its food. After 2 moults the maggots pupate. Magnification x70 at 6x6cm size.","COMPOST, FAUNA AND FLORA","LARVA, FLY, COMPOST HEAP","MAGGOT, FLY, COMPOST HEAP","DIPTERA, LARVA, COMPOST HEAP","FLY, LARVA, COMPOST HEAP","FLY, MAGGOT, COMPOST HEAP","COMPOST, MAGGOT, FLY","ZOOLOGY, WILDLIFE, NATURE","ANIMAL, INSECTA, INSECT","","","","","","","","","","","" "T820/136","XHM","Technician checking temperature of compost heap","CREDIT: HANK MORGAN/SCIENCE PHOTO LIBRARY A technician checking the temperature of an urban waste compost heap. This compost heap at a plant in Minnesota USA is being used to research recycling of disposable nappies. The nappies are added to the normal compost waste, taking about 7 days to degrade. The temperature of the compost heap must remain between 57 and 65 Celsius during that time. At the end of the process, the compost is used as a fertiliser by a forestry growing Christmas trees.","RECYCLING, NAPPIES","NAPPIES, RECYCLING","PAPER PRODUCTS, RECYCLING","COMPOST, URBAN","URBAN WASTE RECYCLING","INDUSTRY, RECYCLE, RECYCLING","","","","","","" ~~ Dermot Paikkos * [EMAIL PROTECTED] Network Administrator @ Science Photo Library Phone: 0207 432 1100 * Fax: 0207 286 8668
The following section of this message contains a file attachment prepared for transmission using the Internet MIME message format. If you are using Pegasus Mail, or any other MIME-compliant system, you should be able to save it or view it from within your mailer. If you cannot, please ask your system administrator for assistance. ---- File information ----------- File: test.csv Date: 13 Oct 2003, 14:43 Size: 6333 bytes. Type: Unknown
test.csv
Description: Binary data
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]