Thread Daten in Array mit Spalten schreiben (9 answers)
Opened by ElPresidente at 2012-06-05 18:59

topeg
 2012-06-05 21:25
#158774 #158774
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Deine Lösung mit substr ist nicht zuverlässig. Soweit ich sehe sind die Anzahl der Zeichen vor den gesuchten Werten nicht Konstant. Besser ist es an den Leerzeichen zu Trennen und die Werte dann auszulesen.
Günstig ist es beim Öffnen einer Datei auszugeben warum das Öffnen fehlschlug. Das steht in $!.
Weiterhin sei empfohlen strict und warnings zu benutzen. Damit ist es leichter Fehler zu finden.
Außerdem sollte man das dreiparameterige open nutzen damit umgeht man ein paar Probleme.

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
36
37
38
39
#!/usr/bin/perl
use strict;
use warnings;

my $file='test.gro';

my @koordinates;

open(my $fh, '<', $file) or die("Die Datei $file konnte nicht geöffnet werden ($!)\n");
while($line=<$fh>)
{
  # nächste Zeile wenn $line kein "SOL" enthält
  next unless($line=~/SOL/);

  # Zeilenumbruch am Ende entfernen
  chomp($line);

  # an den Leerzeichen splitten
  my @values=split(/\s+/,$line);

  # werte zuweisen
  my $xw=$values[2];
  my $yw=$values[3];
  my $zw=$values[4];

  # zweidimensionales Array erzeugen
  # "[ ... ]" ist ein anonymes Array
  push(@koordinates,[$xw,$yw,$zw]);
}
close($fh);

# nach Dritter Spalte Sortieren.
my @sorted=sort{$a->[2] <=> $b->[2]}@koordiantes;

# Ausgabe
print join(',',@$_)."\n" for(@sorted);

# auf einen Wert zugreifen:
print "Erste Zeile Ditte Spalte: ".$koordiantes[0][2]."\n";

View full thread Daten in Array mit Spalten schreiben