Thread Ein Katalog-System: Titel und Untertitel (15 answers)
Opened by Gast at 2004-04-18 16:40

Gast Gast
 2004-04-18 16:40
#81660 #81660
An dem Teil breche ich mir nun schon seit Jahren den Arm und krieg das nicht gebacken.
Kram das Ding immer mal wieder raus - aber so richtig komme ich damit nicht weiter.

Es soll ein Inhaltsverzeichnis/Katalogsystem sein (Haupttitel, Untertitel, Unter-Untertitel, usw.) also irgendwie sowas wie eine Verzeichnisstruktur.

Der nachfolgende Code macht (hinsichtlich der Anzeige) auch genau das was ich davon erwarte ...

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/usr/bin/perl
#-#############################################
# catalog.pl
# Version: 1.03
# Date: 08/09/2002
#-#############################################
   print "Content-type: text/html\n\n";
   $|++;
   use strict;
   use warnings;
   our %category;    
#-#############################################

my $categories = [
   ['Telekommunikation',
['Festnetz',
   ['Telefon',
['Foo', 'Bar']
   ],
   ['Telefax',
['Foo', 'Bar']
   ],
],
['Mobilnetz',
   ['Handy used',
['Siemens',
   ['C25', 'C35', 'Other']
],
['Nokia',
   ['5130', '7710', '8810', 'Other']
],
['Panasonic',
   ['GD90', 'GD91', 'GD92']
]
   ],
   ['Handy unused',
['Panasonic',
   ['GD90', 'GD91', 'GD92']
],
['Siemens',
   ['C25', 'C35', 'Other']
],
['Nokia',
   ['5130', '7710', '8810', 'Other']
]
   ]
]
   ],
   
   ['Computer',
['Hardware',
   ['Monitor',
['Eizo',
   ['15 Zoll', '17 Zoll', '19 Zoll', '20 Zoll']
],
['Other',
   ['15 Zoll', '17 Zoll', '19 Zoll', '20 Zoll']
]
   ],
   ['CPU',
['Intel',
   ['up to 300 MHz', 'up to 600 MHz', 'up to 900 MHz']
],
['AMD',
   ['up to 300 MHz', 'up to 600 MHz', 'up to 900 MHz']
],
['Other',
   ['up to 300 MHz', 'up to 600 MHz', 'up to 900 MHz']
],
   ]
],
['Software',
   ['Operating Systems',
['Windows', 'Linux']
   ],
   ['Applications',
['Office-Software', 'Internet-Software', 'Games']
   ]
]
   ]
];

#-#############################################
# Convert array to hash
# and print a list of categories ...
#-#############################################
   print "<hr>This is reading from array and printing from hash<hr>";
   
   dump_hash_categories($categories);
   
   foreach (sort keys %category) {
print "$category{$_}<br>";
   }
   
#-#############################################
# Alternative:
# Read from array
# and print a list of all categories ...
#-#############################################
   print "<hr>This is reading and printing from Array<hr>";

   my @category = dump_categories($categories);
   print "$_ <br>" for @category;
 
#-#############################################
# Dump Main-Categories
#-#############################################
sub dump_categories {
   my $catalog = shift;
   my ($category, $main_cat, $show_cat);
       
while ($#$catalog >= 0) {
   $category = shift @$catalog;
      while ($#$category >= 0) {
   $main_cat = shift @$category;      
if (ref $main_cat) {
   dump_subcat($main_cat, $show_cat, \@category);
}
else {
   $show_cat = $main_cat;
   push @category, $show_cat;
}
      }
}
   
   sort @category;
}

#-#############################################
# Dump Sub-Categories
#-#############################################
sub dump_subcat {
   my ($sub_main, $show_cat, $catalog) = @_;
   my $sub_cat;
       
while ($#$sub_main >= 0) {
   $sub_cat = shift @$sub_main;
if (ref $sub_cat) {
   dump_subcat($sub_cat, $show_cat, $catalog);
}
else {
   $show_cat .= " >> $sub_cat";
   push @$catalog, $show_cat;
   $show_cat =~ s/(\>\>\s$sub_cat)$// unless ref $sub_main->[0];
}
}
}
 
#-#############################################
# Dump Categories as a hash
#-#############################################
sub dump_hash_categories {
   my ($cat, @sub_cat) = @_;
   
   push @sub_cat, $cat->[0] if $cat->[0] and !ref $cat->[0];
   
foreach my $sub_cat (@$cat) {
   if (ref $sub_cat) {
dump_hash_categories($sub_cat, @sub_cat);
   }
   else {
$category{join("_", @sub_cat[0..($#sub_cat - 1)], $sub_cat)}
= join(" >> ", @sub_cat[0..($#sub_cat - 1)], $sub_cat);
   }
}
}

#-#############################################
exit;


Hat jemand eine Idee wie ich nun einen Hash bilden kann der zu jedem (Klartext) Array-Element den entsprechen Array-Index enthält?
z.B.  'Eizo' => '102113',
(die Zahlenfolge hab ich hier einfach mal willkürlich eingetragen)

Arrrgh ...
die tabs werden vom Forum nicht übernommen :(

View full thread Ein Katalog-System: Titel und Untertitel