Schrift
[thread]6028[/thread]

Editierbarer String?: ausgeben eines editierbared Strings?



<< >> 9 Einträge, 1 Seite
Gast Gast
 2004-01-21 15:01
#79345 #79345
Hallo,

mein Problem besteht darin, einen Stringauszugeben, der durch den Benutzer aenderbar ist und er ihn mittels [ENTER] an den STDIN schickt.

quasi so:

chomp($neuername=(<> <$altervorname)); # geht so nicht :(

Ich will also dem STDIN schon etwas uebergeben, das durch den User geaendert werden kann.

Danke im Vorraus

Mohk
esskar
 2004-01-21 15:05
#79346 #79346
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
my $altervorname = "Sascha";
my $inputvorname = "";
my $neuervorname = $altervorname;

chomp($inputvorname = <>);
$neuervorname = $inputvorname if $inputvorname;
pq
 2004-01-21 15:10
#79347 #79347
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich glaube, mohk meint da was anderes. ein string, der ausgegeben wird und vom user mittels
backspace-taste geändert werden kann. nicht trivial, also so eine art shell-funktion etwa?
du musst mittels Term::Readkey jeden einzelnen tastendruck abfragen und dann richtig
darauf reagieren, d.h. bei backspace machst du z.B. ein print "\b"
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
Crian
 2004-01-21 15:14
#79348 #79348
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Du könntest ein kleines Tk-Fenster mit einem Entry-Widget öffnen, in dem der alte Inhalt schon selektiert ist. Dann kann man ihn überschreiben oder ändern...wenn dieser Weg in Frage kommt, kann ich ein kleines Beispielprogramm posten.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2004-01-21 19:26
#79349 #79349
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn bei dir die Readline-Lib unterstuetzt wird:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings;
use Term::ReadLine;

my $str = "foobar";
my $term = Term::ReadLine->new ('ReadLine Test');

$term->addhistory ($str);
do {{
   $str = $term->readline ('Bitte irgendwas eingeben: ', $str);
   last unless $str;
   print "Sie haben $str eingegeben.\n";
   $term->addhistory ($str);   # Eingabe zur ReadLine-History hinzufuegen
}} while $str;
mohk
 2004-01-22 18:58
#79350 #79350
User since
2003-09-16
6 Artikel
BenutzerIn
[default_avatar]
Sorry das ich jetzt erst antworten kann, meine mail war etwas langsam :) # passwd vergessen

@Bubu: sorry, aber dein code bestaetigt meinen verdacht, das das nciht geht! da foobar, bei mir zumindest , nich in der history erscheint!

Um das nochmal klar zu definieren: gewuenscht ist ein STDIN mit vorgegebenem Inhalt.
Quasicode: $readln=(<STDIN>="foobar"); # geht nicht, da handle nicht schreibbar :)
Dubu
 2004-01-22 22:38
#79351 #79351
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Tja, Pech.
Bei mir funktioniert der Code von oben genau so, wie du es wolltest.
(Perl 5.8.1 mit Term::ReadLine und Term::ReadLine::Gnu unter Linux 2.4.21)
esskar
 2004-01-23 07:05
#79352 #79352
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bei mir läufts auch:

This is perl, v5.8.0 built for MSWin32-x86-multi-thread

Term::Readline ist in der Standard Distri dabei!
ptk
 2004-01-23 16:02
#79353 #79353
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=esskar,23.Jan..2004, 06:05]bei mir läufts auch:

This is perl, v5.8.0 built for MSWin32-x86-multi-thread

Term::Readline ist in der Standard Distri dabei![/quote]
Term::ReadLine schon, aber ohne Term::ReadLine::GNU oder Term::ReadLine::Perl bekommt man die ganzen schoenen Zusatzfeatures nicht.
<< >> 9 Einträge, 1 Seite



View all threads created 2004-01-21 15:01.