Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8809[/thread]

festes Spaltenformat einlesen



<< >> 3 Einträge, 1 Seite
Gast Gast
 2007-03-05 14:12
#74772 #74772
Hallo,
folgendes Problem:
habe Listen die ich in ein Array einlese und Spaltenweise bearbeiten möchte.
Die Spalten sind aber nicht durch TAB oder ; oder ein anderes "Zeichen" getrennt, sondern liegen immer im 8er-Spaltenformat vor (kommt von Fortran).
Ein Tabellenfeld definiert sich also aus den Zeichen 1-8, das nächste aus den Zeichen 9-16, 17-24 usw.
Ich muss innerhalb dieser Felder die Daten verarbeiten können (kann Text oder alle denkbaren Zahlenfomate enthalten zb. 1,  1e-4,  -102.4492)
Wie kann ich mir die Daten dieser Spalten in ein @Array schreiben lassen?
geht das mit split? wie kann ich z.B. angeben "Stelle 8-16 einlesen"

@CIP_Liste ist Input-Datei im 8er-Format

Die erste Spalte ist linksbündig, die restlichen rechtsbündig.
Bsp für 8er-Format:
#2345678_2345678_2345678_2345678
Q4               12301     -52.89      1e-01
.
.

Code:
Code: (dl )
1
2
3
4
5
foreach (@CIP_LISTE) {
my @Spalte2;
@Spalte2 = split (m/???/);
print "@Spalte2\n"
}


---
Modedit Gwendragon: Code in CODE-Tags stellen; Smiley deaktiviert
---

THX!
Matthias\n\n

<!--EDIT|GwenDragon|1173097076-->
renee
 2007-03-05 14:40
#74773 #74773
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -T

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

print CGI::header();

while(my $line = <DATA>){
chomp $line;
my @cols = unpack("A8A8A8A8",$line);
print join(";",@cols),"<br />";
}

__DATA__
#2345678_2345678_2345678_2345678
Q4 12301 -52.89 1e-01
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
GwenDragon
 2007-03-05 14:53
#74774 #74774
User since
2005-01-17
14578 Artikel
Admin1
[Homepage]
user image
So gehts auch:
Code: (dl )
1
2
3
4
5
6
7
my $zeile =
#1234567812345678123456781234567812345678
'Q4          1231  -52.89   1e-01';
my (@spalten) = map { s/^( +)//; $_ } $zeile =~ /.{8}/g;

print "Alle Daten:\n$_\n" for (@spalten);
print "\nSpalte 2: $spalten[1]\n"
\n\n

<!--EDIT|GwenDragon|1173099444-->
die Drachin Gwendolyn
<< >> 3 Einträge, 1 Seite



View all threads created 2007-03-05 14:12.