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