Schrift
[thread]493[/thread]

Wie Array an Datei übergeben

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Tom
 2005-05-16 21:36
#4945 #4945
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich habe ein Array und möchte dieses an eine andere Datei übergeben, wie mache ich das am besten?

Mit einer Referenz auf das Array hats nicht geklappt, da erhalte ich immer folgende Fehlermeldung

Quote
Can't use string ("ARRAY(0x2313418)") as an ARRAY ref while "strict refs" in use at C:\Projekte\Eventmanager\mysql_2.0.0.1\error.cgi line 43


Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
renee
 2005-05-16 21:59
#4946 #4946
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du mit Array an Datei übergeben?? Willst Du etwas serialisieren? Dann schau Dir mal CPAN:Data::Dumper oder CPAN:YAML oder etwas ähnliches an...

Willst Du nur den Inhalt des Arrays als Zeilen in die Datei schreiben, dann:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#! /usr/bin/perl

use strict;
use warnings;

my @array = qw(zeile1 zeile2 zeile3);

open(WRITE,">dateiname.txt") or die $!;
print WRITE $_,"\n" for(@array);
close WRITE;
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/
pKai
 2005-05-16 22:29
#4947 #4947
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Aufgrund des Forums und des Dateinamens in der Fehlermeldung denke ich mal es handelt sich um Felder einer CGI-Form?
I sense a soul in search of answers.
Strat
 2005-05-16 23:23
#4948 #4948
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
fuer's modul CGI gibt es auch ein paar funktionen, die einem das erleichtern, z.B.
Code: (dl )
1
2
3
4
my $cgi = CGI->new();
open (FH, ">", $outfile) or die $!;
$cgi->save(FH);
close (FH) or die $!;

und einlesen:
Code: (dl )
1
2
3
open (IN, "<", $file) or die $!;
my $cgi = CGI->new(IN);
close(IN);

oder so aehnlich (hab's noch nicht ausprobiert)

wenn es sich nicht um cgi handelt (oder auch dann), dann hilft dir eins der serialisierenden module weiter, wie z.B. Storable, Data::Dumper, ...\n\n

<!--EDIT|Strat|1116271453-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tom
 2005-05-17 19:33
#4949 #4949
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ihr habt mich da falsch verstanden, normalerweise übergebe ich die Werte so an eine andere Datei:

Code: (dl )
error.cgi?ec=$ec


Und nun meine Frage, kann ich das auch mit einem Array machen?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Strat
 2005-05-17 19:46
#4950 #4950
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
das kannst du schon machen. dabei musst du nur aufpassen, dass du alle sonderzeichen escapest. als idee zur vorgehensweise (hab's noch nicht ausprobiert):
1. die Datenstruktur als referenz mit freeze aus dem Modul Storable serialisieren
2. das ganze in eine 7-bit-form mit encode aus dem Modul MIME::Base64 bringen
3. als link setzen (bin mir gerade nicht sicher, aber vermutlich muss man noch escapen)

1. den link mit $cgi->param() escapen
2. mit decode aus MIME::Base64 wiederherstellen
3. mit thaw aus Storable deserialisieren
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tom
 2005-05-17 21:29
#4951 #4951
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das ist mir so etwas zu aufwendig, dann speichere ich das Array als Vaiable und zerlege es wieder.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
coax
 2005-05-17 21:56
#4952 #4952
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Wenn du bei deiner Problembeschreibung etwas weiter ausholst, kann man dir vielleicht besser weiterhelfen.
,,Das perlt aber heute wieder...'' -- Dittsche
betterworld
 2005-05-17 22:15
#4953 #4953
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Du kannst es ja auch so machen:
Code: (dl )
script.cgi?feld0=$array[0];feld1=$array[1];feld2=$array[2]

(und so weiter)

Die URL koennte man mit join und map erstellen.

Quote
Ihr habt mich da falsch verstanden
Das war auch nicht schwer ;-)
pKai
 2005-05-18 12:26
#4954 #4954
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=Tom,17.May.2005, 17:33]Ihr habt mich da falsch verstanden, ...[/quote]
Ich nicht :)

Konnte meine Vermutung dazu allerdings nicht früher testen, nämlich:
CGI.pm macht dir das komplett transparent!
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
#!perl -w
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use strict;

local ($\, $|) = ($/, 1);

my $q = CGI->new;

print $q->header;
print $q->start_html (-title => 'test');
print $q->p($q->url(-query_string=>1));
if ($q->param) { # Parameter vorhanden -> Folgeaufruf
print $q->table (
{-border=>1},
$q->caption ('Die folgenden Werte wurden als Liste übergeben:'),
$q->Tr (map { $q->td($_) } $q->param('liste')),
);
} else { # Erstaufruf -> keine Parameter
print $q->start_form ();
print $q->hidden (-name => 'liste', -default => [ 5 .. 12, 'äöüß' ]);
print $q->submit ();
print $q->end_form;
}
print $q->end_html;

Auch das URI-escaping passiert automatisch, wie die Ausgabe des Query-Strings zeigt.
Das einzige worauf man achten muss, ist das param('name' ) sich bei der Rückgabe nach dem Kontext richtet. Wenn der Parameter eine Liste enthält, muss ich die Werte auch im Listenkontext anfordern (D. h. man bekommt im skalaren Kontext keinen Arrayref zurück, wie ich erst dachte)

Edit: fehlendes end_form hinzugefügt.\n\n

<!--EDIT|pKai|1116413542-->
I sense a soul in search of answers.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2005-05-16 21:36.