Thread Zeichenketten aus einer Datei lesen ->: und in einer anderen Datei zufügen (13 answers)
Opened by SimplyFred at 2007-04-26 17:10

PerlProfi
 2007-04-26 19:12
#76264 #76264
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du könntest auch die Daten alle einlesen, bearbeiten und wieder rausschreiben, ohne Modul.
Falls die Reihenfolge der Zeilen dabei verändert werden darf, kannst du Hashes benutzen:
Code: (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/perl
use strict;
use warnings 'all';

# initialize filenames
my $erste_datei = 'test1.txt';
my $andere_datei = 'test2.txt';

# read files
my $data_to_append = &datei_lesen($erste_datei);
my $full_data = &datei_lesen($andere_datei);

# append data
foreach my$key (keys %{$data_to_append})
{
# check whether we can append the data
next if !exists($full_data->{$key});

# append data
push(@{$full_data->{$key}}, @{$data_to_append->{$key}});
}

# output
&datei_schreiben($full_data, $andere_datei);

# NAME: datei_schreiben()
# USE: Datei anhand des musters in eine Datei schreiben
# PARAMETERS: 1. Data
# 2. Filename
# RETURNS: void
sub datei_schreiben($$)
{
# pick parameters
my($data, $file) = @_;

# open file
open(my$fhOUT, '>', $file)
or die "open failed: $!";

# iterate through the data
foreach my$key (keys %{$data})
{
# create line
my $line = $key . ';' . join(';', @{$data->{$key}});

# write out line
print $fhOUT "$line\n";
}

# close file
close($fhOUT)
or die "close failed: $!";
} # datei_schreiben

# NAME: datei_lesen()
# USE: Datei anhand des musters in eine komplexe Datenstruktur einlesen.
# PARAMETERS: Filename
# RETURNS: Hash reference
sub datei_lesen($)
{
# pick parameters
my($file) = @_;

# open file
open(my$fhIN, '<', $file)
or die "open failed: $!";

# read data
my %data;
while (my$line=<$fhIN>)
{
chomp($line);

# split line
my @tracts = split(';', $line);

# key equals the first tract
my $key = shift @tracts;
my $val = [@tracts];

# push data
$data{$key} = $val;
}

# close file
close($fhIN);

# return data reference
return \%data;
} # datei_lesen

Darf die Reihenfolge nicht verändert werden, könntest du die Daten in Arrays sammeln, dazu müsstest du in obigem code nur die Zugriffe auf die Daten abändern.

MfG\n\n

<!--EDIT|PerlProfi|1177600573-->

View full thread Zeichenketten aus einer Datei lesen ->: und in einer anderen Datei zufügen