μετά από τα παρακάτω θέματα, έχω ακόμα ένα πρόβλημα.
ορίζω αρχεία που βρίσκονται σε φάκελο ως:
και πάω να αρχίσω να επεξεργάζομαι κάθε αρχείο ως;Κώδικας:#!/usr/bin/perl use File::Path; use warnings; use strict; my $path = $ENV{HOME}; my $desktop_path = "$path/Desktop"; my $PeakDir = "$desktop_path/BioProject"; my $RepeatDir = "$desktop_path/repeatfiles"; mkpath($PeakDir); #open peak file downloaded and saved to PeakDir folder, and read contents opendir (peakDir, "$PeakDir") || die "can't opendir $PeakDir: $!"; my @peakfiles = readdir (peakDir);
και τρώω ήτα. δεν το βλέπει καλά. τι λάθος κάνω; και γιατί;Κώδικας:#for (my $i=0; $i<=scalar("@peakfiles")-1;$i++);
Εμφάνιση 1-15 από 18
Θέμα: for loop for perl
-
10-01-12, 17:35 for loop for perl #1
-
12-01-12, 19:14 Απάντηση: for loop for perl #2
επιπλέον βλέπω ότι εάν πάω να "εκτυπώσω" το πρώτο στοιχείο που υπάρχει στα peakfiles μου βγαίνει λάθος.
Κώδικας:print "1st file in array is: $peakfiles[0]\n";
-
13-01-12, 20:50 Απάντηση: for loop for perl #3
κανείς;
-
13-01-12, 22:46 Απάντηση: for loop for perl #4
Συνδυάζοντας τα δύο παραπάνω έχουμε
Κώδικας:for (my $i = 0; $i <= scalar(@peakfiles)-1; $i++) { print "$i file in array is: $peakfiles[$i]\n"; }
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
16-01-12, 11:40 Απάντηση: for loop for perl #5
-
16-01-12, 20:27 Απάντηση: for loop for perl #6
Χαχαχα, θεός!!!
Πέρα από την πλάκα όμως, πράγματι το for της perl χρησιμοποιείται όταν θέλεις να κάνεις κάτι πιο εξειδικευμένο με τους indexes. Πιο συχνό και πιο συνηθισμένο για πράγματα που γίνονται σε κάθε μέλος ενός array, είναι το foreach, όπως πολύ σωστά είπε ο boeotian.NetBSD Rocks!
http://www.netbsd.org
-
17-01-12, 09:58 Απάντηση: for loop for perl #7
Πράγματι, μόνο αν σε ενδιαφέρει η θέση των στοιχείων μέσα στο array θα μπορούσες να χρησιμοποιούσες ποτέ το for loop, αν και αυτό λύνεται εύκολα και με counter $i++ κάπου
Επίσης χρησιμοποίησε και αυτό:
Κώδικας:use Data::Dumper; print Dumper($myscalar, $myref, \@myarray, \%myhash);
-
17-01-12, 15:29 Απάντηση: for loop for perl #8
ευχαριστώ για τις απαντήσεις το απόγευμα που θα έχω χρόνο θα δοκιμάσω.
@boetian
Μην γράφετε perl με ανάπηρο τρόπο
-
17-01-12, 23:27 Απάντηση: for loop for perl #9
το for loop με ενδιαφέρει γιατί στο επόμενο βήμα θα χρησιμοποιήσω ένα ένα τα στοιχεία, όπως παίρνουν θέση από την καταμέτρηση i για να γίνεται επεξεργασία σε κάθε ένα.
Όλα αυτά που δίνεται στην παρούσα ενότητα πάντως με βοηθάνε να μάθω να γράφω στην perl.
........Auto merged post: trotos πρόσθεσε 58 λεπτά και 40 δευτερόλεπτα αργότερα ........
το έκανα δούλεψε αλλά είδα ότι έχουν πάρει και καταχωρήσεις τα . και .. όπως φαίνονται στις πρώτες γραμμές:
Κώδικας:0 file in array is: . 1 file in array is: .. 2 file in array is: wgEncodeBroadChipSeqPeaksGm12878Ctcf.broadPeak.gz 3 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k27ac.broadPeak.gz 4 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k27me3.broadPeak.gz 5 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k36me3.broadPeak.gz 6 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k4me1.broadPeak.gz 7 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k4me2.broadPeak.gz 8 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k4me3.broadPeak.gz 9 file in array is: wgEncodeBroadChipSeqPeaksGm12878H3k9ac.broadPeak.gz 10 file in array is: wgEncodeBroadChipSeqPeaksGm12878H4k20me1.broadPeak.gz 11 file in array is: wgEncodeBroadChipSeqPeaksH1hescCtcf.broadPeak.gz 12 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k27me3.broadPeak.gz 13 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k36me3.broadPeak.gz 14 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k4me1.broadPeak.gz 15 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k4me2.broadPeak.gz 16 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k4me3.broadPeak.gz 17 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k9ac.broadPeak.gz 18 file in array is: wgEncodeBroadChipSeqPeaksH1hescH4k20me1.broadPeak.gz
Τελευταία επεξεργασία από το μέλος trotos : 17-01-12 στις 23:27. Αιτία: auto merged post
-
17-01-12, 23:41 Απάντηση: for loop for perl #10
Εφόσον υπάρχουν φυσικά θα τα έχει και αυτά. Αν θες να μην υπάρχουν μπορείς να τα αφαιρέσεις. Ένας τρόπος που μου ήρθε στο μυαλό (χωρίς όμως να ξέρω αν είναι δόκιμος ή ανάπηρος) είναι ο εξής:
Κώδικας:my @peakfiles = grep { ! /^\.{1,2}$/ } readdir (peakDir);
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
17-01-12, 23:59 Απάντηση: for loop for perl #11
ανεξάρτητα από το παραπάνω (την ύπαρξη των αρχείων "." και ".." προχώρησα λίγο την δουλειά ως:
Κώδικας:for (my $i = 0; $i <= scalar(@peakfiles)-1; $i++) { print "$i file in array is: $peakfiles[$i]\n"; for (my $j=0; $j<=scalar(@repeatfiles)-1;$j++) { print "$j file in array is: $repeatfiles[$j]\n"; }
Κώδικας:έχει και άλλα πίσω . . . 0 file in array is: . 1 file in array is: .. 2 file in array is: Class.bed 3 file in array is: Family.bed 4 file in array is: Name.bed 17 file in array is: wgEncodeBroadChipSeqPeaksH1hescH3k9ac.broadPeak.gz 0 file in array is: . 1 file in array is: .. 2 file in array is: Class.bed 3 file in array is: Family.bed 4 file in array is: Name.bed 18 file in array is: wgEncodeBroadChipSeqPeaksH1hescH4k20me1.broadPeak.gz 0 file in array is: . 1 file in array is: .. 2 file in array is: Class.bed 3 file in array is: Family.bed 4 file in array is: Name.bed
όταν μετά καλώ ένα πρόγραμμα από το σύστημα ως:
Κώδικας:system ("intersectBed", "-a", "$repeatfiles[j]", "-b", "$bedfilename[i]")
Κώδικας:String found where operator expected at /Users/sunta3iouxos/Desktop/bioinfo/myscript.pl line 149, near ""intersectBed" "-a"" (Missing operator before "-a"?) String found where operator expected at /Users/sunta3iouxos/Desktop/bioinfo/myscript.pl line 149, near ""-a" "$repeatfiles"" (Missing operator before "$repeatfiles"?) String found where operator expected at /Users/sunta3iouxos/Desktop/bioinfo/myscript.pl line 149, near ""-b" "$bedfilename"" (Missing operator before "$bedfilename"?)
-
18-01-12, 02:00 Απάντηση: for loop for perl #12
-
18-01-12, 11:04 Απάντηση: for loop for perl #13
Συγνώμη αν σε πρόσβαλλα, αλλά ο σκοπός μου ήταν ακριβώς να επιστήσω την προσοχή στο να γράφουμε perl way.
Εγώ πάντως θα προτιμούσα ένα for:
Κώδικας:for (my $i = 0; $i < scalar(@peakfiles); $i++) {
Κώδικας:for my $i (0..scalar(@peakfiles)-1) {
Κώδικας:system ("intersectBed" "-a" "$repeatfiles[j]" "-b" "$bedfilename[i]")
Αυτό που έδωσε ο imitheos αφαιρεί ακριβώς την τελεία και την διπλή τελεία. Έχεις τους operators για αρχή και τέλος, άρα είναι safe matching.
-
18-01-12, 18:56 Απάντηση: for loop for perl #14
-
18-01-12, 20:53 Απάντηση: for loop for perl #15
Πάντως ο συνήθης perl τρόπος (και όχι ανάπηρος ) για να παίρνεις τα αρχεία μέσα σε ένα directory είναι με το λεγόμενο globbing, δηλαδή:
Κώδικας:my @files = <*>; foreach my $file (@files) { print $file . "\n"; }
Κώδικας:my @files = <*>; foreach my $file (@files) { if (-f $file) { print "This is a file: " . $file . "\n"; } if (-d $file) { print "This is a directory: " . $file . "\n"; } }
NetBSD Rocks!
http://www.netbsd.org
Bookmarks