Schrift
[thread]6147[/thread]

open(): sparsamer coden

Leser: 1


<< >> 10 Einträge, 1 Seite
Froschpopo
 2004-03-17 01:06
#81074 #81074
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub update_my_session {
my ($nickname, $time, $customer_id, $sid);
open(SDB, "/usr/local/...") || die;
my @array = <SDB>;
close(SDB);
open(INFILE, ">/usr/local/...") || die;
flock INFILE, 1;
for (@array) {
chomp;
($nickname, $time, $customer_id, $sid) = split( /\|/, $_);
$time = time() if $sid eq $sessionid;
print INFILE "$nickname|$time|$customer_id|$sid\n";
}
flock SDB, 8;
close(INFILE);
}

kann man das nicht auch in einem einzigen open() machen?
Ich hab schon mal mit +> versucht aber klappt nicht. Ich will mir das schreib-open sparen und alles in einem machen...
esskar
 2004-03-17 01:44
#81075 #81075
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wie wäre es denn, wenn du pro session id eine datei anlegst anstatt eine datei für alle, in der du noch ewig suchen musst und du dabei noch maßig speicher verbrätst, weil du die datei komplett einliesst...

ich lege dir CGI::kSession ans Herz! :)

oder benutz gleich ne Datenbank, wenn du eine hast....
Relais
 2004-03-17 02:34
#81076 #81076
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Froschpopo,17.03.2004, 00:06]Ich hab schon mal mit +> versucht aber klappt nicht.[/quote]
klappt nicht gibts nicht.

Ziemlich wirrer Code. Magste mal beschreiben, worum es Dir geht?

Ansonsten schau doch mal nach "Mixing Reads and Writes" in perlopentut
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
pq
 2004-03-17 02:37
#81077 #81077
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@relais: immer noch wach?
@froschpopo: der code sieht danach aus, als würdest du
nur eine einzige zeile verändern wollen. das kann man sicher
einfacher machen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Relais
 2004-03-17 02:46
#81078 #81078
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,17.03.2004, 01:37]@relais: immer noch wach?[/quote]
@pq: selber!
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
Froschpopo
 2004-03-17 03:46
#81079 #81079
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
der code sieht verkürzt so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub update_my_session {
open(SDB, "/usr/local/...") || die;
my @array = <SDB>;
close(SDB);
open(INFILE, ">/usr/local/...") || die;
flock INFILE, 1;
for (@array) {
chomp;
print INFILE "$nickname|$time|$customer_id|$sid\n";
}
flock SDB, 8;
close(INFILE);
}

wie man sehen kann habe ich zweimal open. Ich würde aber gerne beide Operationen (lesen und schreiben) in einem machen!
kabel
 2004-03-17 07:51
#81080 #81080
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
UPDATE:
sparsamer coden?
weil du keine module verwendest?
du sparst an der flaschen setlle ;)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub update_my_session {
   open(SDB, "/usr/local/...") || die;
   my @array = <SDB>;

   #---------------
   seek (SDB, 0, 0);
   #---------------

   flock INFILE, 1;
   for (@array) {
      chomp;
      print INFILE "$nickname|$time|$customer_id|$sid
";
   }
   flock SDB, 8;
   close(INFILE);
}


wenn die funktion nicht mehr macht, dann ist das ziemlich sinnfrei.
oder willst du die zeit, in der der file-lock gesetzt ist, minimieren?
das macht den code eher undurchsichtiger als schneller...\n\n

<!--EDIT|kabel|1079502850-->
-- stefan
Ronnie
 2004-03-17 08:56
#81081 #81081
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
In diesem Zusammenhang möchte ich auf einen Artikel auf perl.com hinweisen:
IO::All
Froschpopo
 2004-03-17 10:14
#81082 #81082
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
[quote=kabel,17.03.2004, 06:51]UPDATE:
sparsamer coden?
weil du keine module verwendest?
du sparst an der flaschen setlle ;)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub update_my_session {
   open(SDB, "/usr/local/...") || die;
   my @array = <SDB>;

   #---------------
   seek (SDB, 0, 0);
   #---------------

   flock INFILE, 1;
   for (@array) {
      chomp;
      print INFILE "$nickname|$time|$customer_id|$sid
";
   }
   flock SDB, 8;
   close(INFILE);
}


wenn die funktion nicht mehr macht, dann ist das ziemlich sinnfrei.
oder willst du die zeit, in der der file-lock gesetzt ist, minimieren?
das macht den code eher undurchsichtiger als schneller...[/quote]
was istn das fürn komisches Beispiel, wo öffnest Du denn INFILE? Deine Worte "wenn die funktion nicht mehr macht, dann ist das ziemlich sinnfrei." kann ich ebenfalls nicht deuten!
kabel
 2004-03-17 10:44
#81083 #81083
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
tja, musst du überlegen was ich flasch gemacht habe 8)
Code (perl): (dl )
s/INFILE/SDB/g

um es kurz zusammenzufassen:
wenn du dir ein open sparen willst, dann muss es zwansläufig die gleiche datei sein => seek
ok, doch net sinnfrei, ich hab deinen zuerst geposteten code net angeguckt, sondern den verkürzten. sorry!

mein modulvorschlag: das CPAN:band, dass dateien mit feldern zusammenknotet ;)
-- stefan
<< >> 10 Einträge, 1 Seite



View all threads created 2004-03-17 01:06.