Text auslesen Funktioniert nicht?

#1
Guten Tag,

Versuche schon seid 3 tagen die datei auszulesen aber irgendwie funktioniert das nicht? sollte doch eigentlich damit funktionieren?

Das schreiben mit dem Befehl geht

on *:TEXT: *:#: {
write C:\***** $nick : $2- $+
msg $chan save: $2-
}

nur das auslesen macht mit irgendwie schwirichkeiten es will garnicht gehen weder mit play noch mit $read
das war mein letzter versuch der leider wieder nicht ging so wollte ich die wieder auslesen???

on *:TEXT:*:#: {
var %i = 1
msg ($read(C:\******,%i)) {
echo -a $ifmatch
inc %

könnte mir mal bitte jemand helfen und mir ne erklärung dazu geben?? bin grade echt ratlos.
 

DJFelipe

Well-Known Member
c-b Experte
#2
Benutz doch bitte nächstes mal die Code-Tags.. Das erleichtert das Lesen... :)

Bist du dir sicher, dass du alles ab dem 2. Wort speichern willst? Wenn nicht, würde ich im on TEXT das $2- durch $1- ersetzen.
Jetzt kommen wir aber zu den größeren Fragen. Was genau willst du aus der Datei auslesen? $read in mIRC kennt nur 2 nützliche Parameter. Entweder du gibst keine an, dann sucht er sich eine zufällige Zeile aus oder du gibst eine Zeilennummer an (Was du in deinem Beispiel hast und mit 1 beginnst).
Zusätzlich musst du zum MSG Befehl auch angeben, wohin er das ganze schreiben soll...

Vermutlich gibt das ganze hier mehr Sinn, sofern du die letzten 5 Zeilen mit dem Befehl !zeig ausgeben willst:
Code:
on *:TEXT:*:#:{
  if ($1 == !zeig) {
    var %end = $lines(C:\...)
    var %counter = $calc(%end - 4)
    if (%counter < 0) {
      var %counter = 0
    }
    while (%counter <= %end) {
      msg $chan Replay: $read(C:\...,%counter)
      inc %counter
    }
  } else {
    write C:\... $timestamp $nick $+ : $1-
    msg $chan save
  }
}
Kleine Erklärung:
Die erste IF prüft, ob das 1. Wort '!zeig' ist. Wenn ja wissen wir, dass wir den Text ausgeben sollen. Also gehen wir in den IF Block. Jetzt holen wir uns erstmal die aktuelle Anzahl der Zeilen aus deiner Textdatei in %end rein. Nun können wir unseren 'counter' oder besser gesagt Startpunkt berechnen. Hier sagen wir, wir wollen 4 Zeilen vor dem Ende Anfangen. Nachdem jetzt allerdings bei nur 2 Einträgen die Zahl von %counter ins Minus laufen würde, fangen wir das mit der darauf folgenden IF an und setzen pauschal einfach '0' als Anfangswert.
Jetzt kommen wir zur While Schleife. Diese läuft so lang, wie %counter kleiner oder gleich %end ist. Haben wir 25 Einträge, starten wir also bei Eintrag 21 und gehen bis inkl 25 durch. Durch den Befehl MSG schicken wir das nun an $chan (gefüllt mit dem Channel, wo der Befehl !zeig geschrieben wurde) und lesen mit $read deine Datei an der Zeile %counter. Danach erhöhen wir %counter für den nächsten Durchlauf der while Schleife.

Ich hoffe ich konnte dir weiter helfen, auch wenn ich MSL seit über 3 Jahren nicht mehr in der Hand hatte :rolleyes:
Kleine Anmerkung noch: Der Code ist nicht getestet!
 
#3
Danke dir aufjedenfall hoffentlich bekomme ich es entlich mal hin sonst gebe ich es auf :)

Sollen paar notizen sein die untereinander stehen wenn ich sie mal brauche einfach aufrufen kann per befehl

Ich danke dir schonmal sehr
 

DJFelipe

Well-Known Member
c-b Experte
#5
Was geht denn genau nicht?

Ich habe mir eben nochmal den Code angesehen und getestet. Das Auslesen der letzten 5 Zeilen funktioniert mit folgendem Block problemlos:
Code:
alias DateiLeseTest {
  var %lines = $lines(test.txt)
  var %counter = $calc(%lines - 4)
  if (%counter < 1) var %counter = 1
  while (%counter <= %lines) {
    echo -a Replay: $read(test.txt,%counter)
    inc %counter
  }
}
 
#6
a jetzt funktioniert es aber er speichert das jetzt nicht in msg chan sondern in das echo -a hab das echo -a umgeändert aber tut sich nix aber das ist schonmal super das er die wenigstens aufruft bastel mal rum vielleicht bekomme ich es ja jetzt hin so schwer kann es ja jetzt nicht mehr sein :)
 

DJFelipe

Well-Known Member
c-b Experte
#7
Ich rieche glaube ich dein Problem. Du kannst in einer Remote Scripts Datei nicht einfach mehrere on TEXT Blöcke haben, die vom Event (Trigger Text) identisch sind...
Mach mal eine neue Scripts Datei (File -> New) und probier das (überarbeitete aber mal wieder nicht getestete) Script von mir:
Code:
on *:TEXT:*:#:{
  if ($1 == !zeig) {
    var %end = $lines(C:\...)
    var %counter = $calc(%end - 4)
    if (%counter < 1)  var %counter = 1
    while (%counter <= %end) {
      msg $chan Replay: $read(C:\...,%counter)
      inc %counter
    }
  } else {
    write C:\... $timestamp $nick $+ : $1-
    msg $chan save
  }
}
Kleine Anmerkung noch: ein ON TEXT Block kann von dir selbst niemals getriggert werden!
 
#8
dein überarbeiteter macht genau das gleiche bekomme alles im fenster aber nicht im msg $chan dafür das das bei dir 3 jahre lang her ist hast du es aber echt gut drauf hänge seid 4 monaten dran aber irgendwie naja

ahh speicher jetzt denn ganzen chat ;) grade aufgefallen
 

DJFelipe

Well-Known Member
c-b Experte
#9
Naja Fahrradfahren verlernt man ja auch nicht direkt.. :)

msg $chan -> Schreibt den Text in den Raum zurück, wo der Befehl zum Triggern her kam.

Schreib doch nochmal GENAU was du wie haben willst...
 
#10
also das ist alles soweit richtig es funktionier auch wenn ich !zitat mache dann schmeißt er es mir ins mirc fenster aber nicht im chat fenster sozusagen weiß nicht wie ich es sagen soll emm wie kann man es am besten erklären..
 
#14
ich erkläre dir das mal so ich habe Mirc auf und z.b skype wenn ich in skype jetzt den befehl eingebe gibt er in mir wieder aber in Mirc und nicht in Skype
 
Oben