Schrift
[thread]13157[/thread]

zwei fragen zu fehlern - datei schreiben und ???

Leser: 4


<< >> 5 Einträge, 1 Seite
jan99
 2009-02-19 09:38
#118973 #118973
User since
2008-09-18
439 Artikel
BenutzerIn
[default_avatar]
Moin !

ich habe mich an mein erstes eigenes Erstlingswerk gewagt und soweit funktioniert alles wie erwartet. Es handelt sich um eine kleine Konvertierungsfunktion.

Das Ergebnis wird zwar erzeugt - ab dennoch bekomme ich noch Meldungen angezeigt und diese würde ich gerne beheben.

Der vollständige Code mit einer Beispieldatei ist unter http://www.tappenbeck.net/forum/perl/csv2osm_20090219.rar zu finden.

Die eine Fehlermeldung lautet:

Use of uninitialized value within @colnames in concatenation <.> or string at [Dateiname] line 127, <fh> line [für jede Zeile die eingelesen wird]

Der zugehörige Code ist:
Code: (dl )
print FILEHANDLE "    <tag k='".$colnames[$j]."' v='".$value[$j]."' />\n";


Vermutlich irgendetwas mit FILEHANDLE - da bei der einfachen Printausgabe keine Fehlermeldung kommt !


Die zweite Meldung kommt am Schluss:

Use of uninitialized value $err_msg in concatenation <.> or string at [Dateiname] line 137, <fh> line 26


Kann mir einer von Euch weiterhelfen und wenn etwas auszusetzen gibt - dann nur zu mit Kritik.

Gruß Jan :-)
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de
Struppi
 2009-02-19 10:48
#118978 #118978
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Code (perl): (dl )
for ($j=2;$j<=$countcol;$j++){

Solche Schleifen sind immer Verdächtig. Einmal sind diese so in Perl nicht üblich, da Perl bessere Möglichkeiten bietet um auf alle Elemente eines Array zu zugreifen. Dann ist in so einem Fall <= meistens falsch.

Ich würde die Schleife in etwa so machen (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
my @colnames = qw/name    megalit_type    moved   place   village    historic /;
my $err_msg = '';
while(my $dataline=<$fh>){
        chomp($dataline);
        
        $line_count++;
        
        #aufsplitten der csv-datei
        
        my @value = split(/;/,$dataline);
        
        #create node-data
        my $lat = shift @value;
        my $log = shift @value;
        
        #lat and log define?
        if (defined $lat && defined $log){
                #output node-header
                $object_id--;
                print FILEHANDLE sprintf "  <node id='%s' action='modify' visible='true' lat='%s' lon='%s'>\n", 
                $object_id, $lat, $log;
                # get column-values and set to node
                foreach my $col(@colnames) {
                        my $value = shift @values;
                        next if !defined $value || length $value < 1;
                        print FILEHANDLE sprintf "<tag k='%s' v='%s' />\n", $col, $value;
                }
                $point_count++;
                print FILEHANDLE "  </node>\n";
                
                } else {
                        $err_msg .= "missing lat- and/or log-value in line $line_count\n";
        }#endif - &&

}# end-while
jan99
 2009-02-19 20:43
#119004 #119004
User since
2008-09-18
439 Artikel
BenutzerIn
[default_avatar]
hi !

danke - auch für die verbesserungsvorschläge.

im übrigen muss es in zeile 24 "value" - ohne s heißen!

gruß Jan :-)
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de
Gast Gast
 2009-02-20 01:09
#119012 #119012
Zeilen die mir aufgefallen sind:

Code (perl): (dl )
1
2
3
4
5
close($csvfile); # <== Was soll das denn??

open(my $output,'>',$osmfile) or die "can not open osm output file"; # <== Fehlermeldung nicht vergessen! "," nicht "." das ist sicherer

my @value = split(/;/,$dataline); # <== ich hoffe das keine entweteten Semikola (\;), oder welche innerhalb von anfürungszeichen vorkommen 
nepos
 2009-02-20 09:12
#119017 #119017
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bei ner Fehlermeldung sollte man, grade wenns um sowas wie open() geht, auf jeden Fall auch noch $! mit ausgeben. Sonst hilft die Meldung nämlich auch nicht wirklich weiter...
<< >> 5 Einträge, 1 Seite



View all threads created 2009-02-19 09:38.