PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl-script und if?



Chakotay
04-07-2006, 08:59
hi ich bin erst ganz frisch dabei perl zu lernen und versuche zur zeit ein kleines script für xchat zu schreiben (immo noch recht erfolglos :confused: )

also ich muss mein perl-script davon überzeugen
mittels ner "if" auf jede zeile einer vorhandenen txt datei ($chanfav)
diesen befehl auszuführen:

IRC::command("/MENU ADD \"Favoriten/Channel/J $chanfavtxt\" \"JOIN $chanfavtxt\"") ;

wobei $chanfavtxt immer die nächste zeile der vohandenen txt datei ($chanfav) sein muss


---
in meiner vorhandenen txt datei ($chanfav) steht nur:
#test1
#test2
#test3
---
der zeilen inhalt und die anzahl der zeilen sind aber variabel
und könnten beim nächsten start meines perl-scripts auch anders sein :
#tralala
#jupidi
#melodie
#majoran
#derdiedas

kann mir hier jemand weiter helfen???

so sieht der erfolglose teil zur zeit aus :-)

#!/usr/bin/perl -w
# written by Chakotay

my $NAME = "X-Chat Favoriten-Menu";
my $VERSION = "v0.5";
my $home = Xchat::get_info("xchatdir");
my $chanfav = "$home/CS-MODULE/favoriten-chan.txt" ;
my $chanfavtxt = "???" ;
my $editor = "kate";

Xchat::register($NAME, $VERSION,
"[Chako]Scripts ($NAME)") ;

IRC::command('/MENU -p6 ADD "Favoriten"') ;
IRC::command('/MENU ADD "Favoriten/Channel"') ;
IRC::command('/MENU ADD "Favoriten/Channel/Join Channel" "getstr # join "Enter Channel to Join:""') ;
IRC::command('/MENU ADD "Favoriten/Channel/-"') ;

# Dies iss der befehl der pro zeile meiner $chanfav ausgeführt werden soll ;-)
#####
IRC::command("/MENU ADD \"Favoriten/Channel/$chanfavtxt\" \"JOIN $chanfavtxt\"") ;
#####



IRC::command('/MENU ADD "Favoriten/Channel/-"') ;
Xchat::command("menu ADD \"Favoriten/Channel/Edit Favoriten\" \"exec $editor $chanfav\"");

Chakotay
04-07-2006, 12:48
Funktioniert zwar immernoch nicht
sieht aber glaub schon besser aus oder :-) ?


#!/usr/bin/perl -w
# written by Chakotay

my $NAME = "X-Chat Favoriten-Menu";
my $VERSION = "v0.5";
my $home = Xchat::get_info("xchatdir");
my $chanfav = "$home/CS-MODULE/favoriten-chan.txt" ;
my $servfav = "$home/CS-MODULE/favoriten-serv.txt" ;
my $editor = "kate";

Xchat::register($NAME, $VERSION,
"[Chako]Scripts ($NAME)") ;

IRC::add_command_handler("CSAFSM","ADD_Menu_Server_favs") ;
IRC::add_command_handler("CSAFCM","ADD_Menu_Channel_favs") ;

IRC::command('/MENU DEL "Favoriten"') ;

IRC::command('/MENU -p6 ADD "Favoriten"') ;
IRC::command('/MENU ADD "Favoriten/Channel"') ;
IRC::command('/MENU ADD "Favoriten/Channel/Join Channel" "getstr # join "Enter Channel to Join:""') ;
IRC::command('/MENU ADD "Favoriten/Channel/-"') ;
IRC::command('/MENU ADD "Favoriten/Channel/#flirtwelten.de" "JOIN #flirtwelten.de"') ;
IRC::command('/MENU ADD "Favoriten/Channel/#MKI-Haendler" "JOIN #MKI-Händler"') ;

IRC::command("/CSAFCM") ;

IRC::command('/MENU ADD "Favoriten/Server"') ;
IRC::command('/MENU ADD "Favoriten/Server/Join Server" "getstr "irc." "NEWSERVER" "Enter server to Join:""') ;
IRC::command('/MENU ADD "Favoriten/Server/-"') ;

IRC::command("/CSAFSM") ;

IRC::command('/MENU ADD "Favoriten/Channel/-"') ;
IRC::command('/MENU ADD "Favoriten/Server/-"') ;
Xchat::command("menu ADD \"Favoriten/Channel/Edit Favoriten\" \"exec $editor $chanfav\"");
Xchat::command("menu ADD \"Favoriten/Server/Edit Favoriten\" \"exec $editor $servfav\"");
#
### ANFANG Nicht so Funktionierender Teil wie ich es möchte^^
#
sub ADD_Menu_Server_favs
{
open $servfav => my $servfavtxt = () ;
IRC::command("/MENU ADD \"Favoriten/Server/$servfavtxt\" \"NEWSERVER $servfavtxt\"") ;
return 1 ;
}


sub ADD_Menu_Channel_favs
{
open $chanfav => my $chanfavtxt = () ;
IRC::command("/MENU ADD \"Favoriten/Channel/$chanfavtxt\" \"JOIN $chanfavtxt\"") ;
return 1 ;
}
#
### ENDE
#

michael.sprick
04-07-2006, 14:27
hi,

ich habe jetzt zwar nicht alles verstanden, was Du da machst, aber eine Datei zeilenweise durchgehen kannst Du so:



open(FH,"<$Dateiname");
my @Lines = <FH>;
close(FH);

#zeilenweise durchgehen:
foreach my $Line (@Lines)
{
IRC::command("/MENU ADD \"Favoriten/Channel/$Line\" \"JOIN $Line\"") ;
}


meintest Du sowas?

Chakotay
04-07-2006, 18:31
JAAAAAAAAAAAAAAAA :-D *megafettesfreu*

GENAU das hab ich gesucht und nicht gefunden

Danke
Danke
Danke

bischi
04-07-2006, 19:13
Zeile und nicht zeihle.
lernen und nicht lehrnen.

;) MfG Bischi

Chakotay
04-07-2006, 19:53
ok nicht ganz hilfreich bischi
aber ok hab's geändert^^

bischi
04-07-2006, 20:19
ok nicht ganz hilfreich bischi
aber ok hab's geändert^^
Du hasts so konsequent falsch geschrieben, da wollte ich dich drauf hinweisen...

MfG Bischi

Chakotay
05-07-2006, 13:37
hmm
irgendwas stimmt da noch nicht ?!?


IRC::command("/MENU ADD \"Favoriten/Channel/$Line\" \"JOIN $Line\"") ;

erstellt ja einen menupunkt / zeile (s.o.)

aber aus irgendeinen mir noch unklahren grund macht er das nur bei der letzten zeile richtig

alle oberen zeilen werden im menu als doppelzeilen dargestellt
und funktionieren dadurch nich



* Suche nach irc.flirtwelten.de

* Unbekannter Host. Vielleicht hast Du ihn falsch geschrieben?


nur der server der aus der letzten zeile heraus aufgerufen wird
wird auch wirklich aufgerufen :confused:

michael.sprick
05-07-2006, 14:45
Achja... vermutlich ein das Newline Zeichen ;)

bau mal noch folgende Zeile ein:



foreach my $Line (@Lines)
{
chomp($Line);
IRC::command("/MENU ADD \"Favoriten/Channel/$Line\" \"JOIN $Line\"") ;
}


chomp entfernt das Newlinezeichen am Ende einer Zeichenkette - nicht zu verwechseln mit chop(), welches nämlich gnadenlos das letzte Zeichen entfernt....

näheres unter "perldoc -f chomp"

Chakotay
05-07-2006, 16:32
Jaah
Danke jetzt Funst es fehlerfrei :-)

Chakotay
06-07-2006, 16:23
sag mal

wie müsste denn das selbe aussehen
wenn statt einer textdatei
zwei textdateien zeilenweise durchgegangen werden sollen
und NUR wenn eine zeile von datei eins nen unterschied zur selben zeile in datei zwei hat
der befehl ausgeführt werden soll

dann natührlich auch nicht auf alle zeilen wie oben sondern nur auf die zeilen die nen unterschied haben


?

und kann man sagen das er beim auflisten generell die erste zeile der datei auslassen soll

wenn ja wie ?

Chakotay
12-08-2006, 11:43
chop() entfernt ja gnadenlos das letzte zeichen

gibbet da auch was das gnadenlos das erste zeichen entfernt ?