Seite 9 von 12
Verfasst: 02.04.2007 00:15
von Nero
k habs übernommen
Werde morgen mal schauen und mir mal gedanken über ein paar nützliche
funktionen machen damit es nicht nur 2 bleiben ^^
// Nachtrag: Aber protected sollten die Variablen in den Proceduren schon sein,
sonst hauen wir nachher eine vorhandene globale buffer um den Haufen
Stimmt
Das sind dann die sachen wo man sucht und sucht und den fehler nicht findet

Verfasst: 02.04.2007 02:35
von ts-soft
Nero hat geschrieben:
Werde morgen mal schauen und mir mal gedanken über ein paar nützliche
funktionen machen damit es nicht nur 2 bleiben ^^
Vorher bitte meine letzte Version laden:
http://ts-soft.eu/dl/perlez.zip
Gruß
Thomas
Verfasst: 02.04.2007 02:47
von Nero
Habs geupdatet.
Hm macht mal vorschläge ich steh aufm schlauch

irgentwie will mir nix sinvolles einfallen

Verfasst: 02.04.2007 02:57
von ts-soft
Nero hat geschrieben:Hm macht mal vorschläge ich steh aufm schlauch

irgentwie will mir nix sinvolles einfallen

splitStringToArray wie AND51 bereits vorgeschlagen hatte
Und HashTables! Wenns geht.
Split(), Join() usw., alles was in PB fehlt oder eingeschränkt ist.
Verfasst: 02.04.2007 08:56
von AND51
So, bin wieder da, mich hat's am WE so richtig erwischt... *schnief*
Mal sehen, was ihr bis jetzt fabriziert habt!
Verfasst: 02.04.2007 13:17
von Nero
So, bin wieder da, mich hat's am WE so richtig erwischt... *schnief*
Wilkommen zurück und gute besserung
So hab mal ne kleine SplitToArray Procedure erstellt
neu in der example.pb
Code: Alles auswählen
Dim String.s(0)
plStringToArray(String(), plHandle, "hallo ich bin der text", " ")
Debug String(2)
neu in der PerlTools_Include.pbi
Code: Alles auswählen
Procedure plStringToArray(MyArray.s(1), plHandle.l, String.s, Seperator.s = " ", BufferSize.l = 1024)
Protected buffer.s = Space(BufferSize)
Protected Key.s = MD5Fingerprint(@String, Len(String))
Result = PerlEzCall4(plHandle, "SplitToArray", buffer, BufferSize, "sssi", @Key, @String, @Seperator, @dummy)
If Result = #plezNoError
ReDim MyArray.s(Val(buffer) - 1)
For x.l = 0 To Val(buffer) - 1
sX.s = Str(x)
Protected ARBuffer.s = Space(BufferSize)
Result = PerlEzCall2(plHandle, "getSplitElement", ARBuffer, BufferSize, "ss", @Key, @sX)
If Result = #plezNoError
MyArray(x) = ARBuffer
Else
plDebugErrorString(Result)
EndIf
Next
ProcedureReturn 1
Else
plDebugErrorString(Result)
EndIf
EndProcedure
und die PerlTools.pl sieht nun so aus
Code: Alles auswählen
#!
my %ArrayList;
sub StringField { return 0 || (split(("$_[2]"||" "), $_[0]))[$_[1] - 1] if($_[1]); }
sub RegEx { eval('$_[0] =~ '. $_[1]); return $_[0]; }
sub SplitToArray
{
if (!$ArrayList{$_[0]})
{
my @Array = split(("$_[2]"||" "), $_[1]);
$ArrayList{$_[0]} = \@Array;
return @{$ArrayList{$_[0]}};
}
else
{
return @{$ArrayList{$_[0]}};
}
}
sub getSplitElement { return $ArrayList{$_[0]}[$_[1]]; }
Verfasst: 02.04.2007 13:33
von Nero
Hm Hashes kannst du eigentlich auch verwenden
Code: Alles auswählen
buffer.s = Space(BufferSize)
PerlEzEvalString(plHandle, "%NeyHash = ('key1' => '123', 'key2' => '456')", buffer, 1024);
PerlEzEvalString(plHandle, "$NeyHash{'test'} = 'ich bin ein hash Test ';", buffer, 1024);
PerlEzEvalString(plHandle, "return $NeyHash{'test'};", buffer, 1024);
Debug buffer
PerlEzEvalString(plHandle, "return $NeyHash{'key2'};", buffer, 1024);
Debug buffer
PerlEzEvalString(plHandle, "return $NeyHash{'key1'};", buffer, 1024);
Debug buffer
Sieht zwar nicht schön aus würde aber funktionieren
Verfasst: 02.04.2007 15:53
von Nero
Habe das nochmal in einer Procedure zusammengefast
Die PerlTools_Include.pbi damit erweitern
Code: Alles auswählen
Procedure.s plEval(plHandle.l, evalString.s, ReturnBuffer.l = 1, BufferSize.l = 1024)
Protected buffer.s = Space(BufferSize)
Result = PerlEzEvalString(plHandle, evalString, buffer, BufferSize);
If Result = #plezNoError
If ReturnBuffer = 1
ProcedureReturn buffer
EndIf
Else
plDebugErrorString(Result)
EndIf
EndProcedure
example.pb
Code: Alles auswählen
plEval(plHandle, "%NeyHash = ('key1' => '123', 'key2' => '456')", 0)
plEval(plHandle, "$NeyHash{'test'} = 'ich bin ein hash Test';", 0)
Debug plEval(plHandle, "$NeyHash{'test'};")
Debug plEval(plHandle, "$NeyHash{'key2'};")
Debug plEval(plHandle, "$NeyHash{'key1'};")
Verfasst: 02.04.2007 17:05
von AND51
Tipp: EIne PB'ische Version des splitStringToArray() habe ich einige Seiten zuvor gebastelt, ist kürzer, als deine.
Noch ein Tipp: Als ich splitStringToArray() vorschlug, habe ich das getan, als Vergleich:
- in PB gibt's das nicht (selber coden)
- in Perl gibt's sogar einen nativen Befehl dafür
Der Perl Befehl heißt ganz einfach split() und gibt ein Array zurück. Warum also ein eigenes split() nacprogrammieren?

Verfasst: 02.04.2007 17:45
von Nero
Noch ein Tipp: Als ich splitStringToArray() vorschlug, habe ich das getan, als Vergleich:
- in PB gibt's das nicht (selber coden)
- in Perl gibt's sogar einen nativen Befehl dafür
Hm also die SplitToArray nutzt ja den Perl Split() ^^
Das es dircket in PB kürzer geht is klar sollen ja nur Beispiele sein was man so machen kann.
So und nun noch nen Bsp. mit splice()
neu in der PerlTools_Include.pbi
Code: Alles auswählen
Procedure plSplice(plHandle.l, MyArray.s(1), splStart.l, splStop.l, String.s = "")
Protected buffer.s = Space(BufferSize)
plEval(plHandle, "my @WorkArray ;", 0)
For x = 0 To PeekL(@MyArray.s() - 8) - 1
plEval(plHandle, "$WorkArray["+Str(x)+"] = '" + MyArray.s(x) + "';", 0)
Next
If String <> ""
plEval(plHandle, "splice(@WorkArray,"+Str(splStart)+","+Str(splStop)+","+String+");", 0)
Else
plEval(plHandle, "splice(@WorkArray,"+Str(splStart)+","+Str(splStop)+");", 0)
EndIf
Rows.l = Val(plEval(plHandle, "@WorkArray;"))
ReDim MyArray.s(Rows)
For x = 0 To Rows
MyArray.s(x) = plEval(plHandle, "@WorkArray["+Str(x)+"];")
Next
EndProcedure
und in der example.pl
Code: Alles auswählen
For x = 0 To PeekL(@String() - 8) - 1
Debug String(x)
Next
Debug Space(1)
plSplice(plHandle, String(), 1, 0, "Neu1")
plSplice(plHandle, String(), 4, 0, "Neu2")
plSplice(plHandle, String(), 5, 1, "der_ist_ersetzt")
For x = 0 To PeekL(@String() - 8) - 1
Debug String(x)
Next