Problem
DXL besitzt leider nur sehr wenige Stringfunktionen. Man muss sich für einfache Stringmanipulationen eine eigene Bibliothek bauen.
DXL consists only of a very less number of string functions. For this purpose you have to implement your own library.
Ansatz – Approach
Ich habe die wichtigsten Stringfunktionen aus JAVA/PHP in eine Bibliothek ausgelagert, die ich im Kopf meiner DXL Skripte einbinde…
I have implemented a library with the most important string function from JAVA/PHP, which can be included in the head of DXL scripts…
Lösung – Solution
Das Einbinden erfolgt z.B. mit
#include "\\\\der\\netzwerk\\pfad\\strings.inc";
wobei oben ein Netzwerkpfad genutzt wird. Ohne Pfadangebe muss die Datei direkt im dxl-Verzeichnis der Installation des Doors-Clients liegen.
/******************************
* String funktionen
* @Author: Bjoern Karpenstein
* @Datum: 2012-11-06
******************************/
// Zweistellige Ganzzahl mit fuehrender Null
string getZeroPrefixedInt(int i)
{
string s = i „“;
if (i < 10) s = "0" s "";
return s;
}
// Gib datum und Uhrzeit als String
string getDateTime()
{
string dateTimeString = "";
int now = intOf(dateAndTime(today));
Date d = dateOnly(today);
int day = intOf(date(stringOf(d)));
int diff = now-day;
int hours = diff / 3600;
int mins = (diff - (3600 * hours)) / 60;
int secs = diff - (hours * 3600) - (mins * 60);
return "
„;
}
// Gib datum und Uhrzeit als String für Dateien
string getFileTimestamp()
{
string dateTimeString = „“;
int now = intOf(dateAndTime(today));
Date d = dateOnly(today);
int day = intOf(date(stringOf(d)));
int diff = now-day;
int hours = diff / 3600;
int mins = (diff – (3600 * hours)) / 60;
int secs = diff – (hours * 3600) – (mins * 60);
return stringOf(today, „yyyy-MM-dd“) „_“ getZeroPrefixedInt(hours) „_“ getZeroPrefixedInt(mins) „_“ getZeroPrefixedInt(secs) „“;
}
// Gib datum und Uhrzeit als String für Dateien
string getAvitumTimestamp()
{
string dateTimeString = „“;
int now = intOf(dateAndTime(today));
Date d = dateOnly(today);
int day = intOf(date(stringOf(d)));
int diff = now-day;
int hours = diff / 3600;
int mins = (diff – (3600 * hours)) / 60;
int secs = diff – (hours * 3600) – (mins * 60);
return stringOf(today, „yyyy-MM-dd“) “ “ getZeroPrefixedInt(hours) „:“ getZeroPrefixedInt(mins) „:“ getZeroPrefixedInt(secs) „“;
}
// Gib datum und Uhrzeit als String für Dateien
string getAvitumDate(Date d)
{
return stringOf(d, „yyyy-MM-dd“);
}
// Gibt die Groesse eines Arrays zurück
int getArraySize(Array a){
int size = 0;
while( !null(get(a, size, 0) ) )
size++;
return size;
}
// Fuegt einen String in ein Array hinzu
void addArrayString(Array a, string str)
{
int array_index = getArraySize(a);
put(a, str, array_index, 0);
}
// Gibt den String im Array zurueck
string getArrayString(Array a, int index)
{
return (string get(a, index, 0));
}
// Setze String für vorhandene Array-Position
void setArrayString(Array a, int change_index, string newString)
{
put(a, newString, change_index, 0);
}
// Der notorische Sortieralgorithmus für Arme
void bubbleSort(Array a, bool asc)
{
int size=getArraySize(a);
int i=0;
int j=0;
for(i=0; i
if(sortierKriterium)
{
// Tauschen
string swapRAM=getArrayString(a,j);
setArrayString(a, j, getArrayString(a,i));
setArrayString(a, i, swapRAM);
}
}
}
}
// Zum analysieren eines Strings auf seine Ascii Zeichen
string giveMeAscii(string withoutAscii)
{
string myAsciiString = „“;
for (i=0; i
char firstChar = sSearch[0]
Buffer s = create()
int pos = 0, d1,d2;
int i
while (pos < iLen) {
char ch = sSource[pos];
bool found = true
if (ch != firstChar) {pos ++; s+= ch; continue}
for (i = 1; i < iLenSearch; i++)
if (sSource[pos+i] != sSearch[i]) { found = false; break }
if (!found) {pos++; s+= ch; continue}
s += sReplace
pos += iLenSearch
}
string result = stringOf s
delete s
return result
}
// Backslashes maskieren und LF durch
ersetzen
string mask(string toMask)
{
string backslashStrip = replace(toMask, „\\“, „\\\\“);
string doubleQuoteStrip = replace(backslashStrip, „\““, „\\\““);
string replaceLFWithBRs = replace(doubleQuoteStrip,“\n“,“
„);
// string replaceLFWithBRs = replace(doubleQuoteStrip,“\012″,“
„);
//return replace(replaceLFWithBRs, „\015“, „“);
return replaceLFWithBRs;
}
// Backslashes maskieren und LF durch
ersetzen
string unmask(string toUnMask)
{
string backslashStrip = replace(toUnMask, „\\\\“,“\\“);
string doubleQuoteStrip = replace(backslashStrip, „\\\““,“\““);
// wenn da
drinne sind ignoriere 13 oder 10
string machLFWeg = replace(doubleQuoteStrip,“
„,“\n“);
// string machLFWeg = replace(doubleQuoteStrip,“
„,“\012“) <- 10 wech;
// return replace(machLFWeg, "\015", "") <- 13 wech;
return machLFWeg;
}
// LTRIM gibts wohl nicht
string leftTrim(string einString)
{
int dieLetztePosition=-1;
for (x=0; x
{
if( einString[x:x] != “ “ )
{
dieLetztePosition=x;
break;
}
}
return einString[0:dieLetztePosition];
}
// Gibt die erste Position eines Strings zurück
int indexOf(string testString, string part)
{
Buffer buf = create()
buf = testString
int index = 0
while(true)
{
index = contains(buf, part, index)
if(0 <= index)
{
return index;
index += length(part)
}
else { return -1; break }
}
delete(buf)
}
// Gibt die erste Position eines zeichens zurueck
int indexOfChar(string derString, string dasZeichen)
{
int dieLetztePosition=-1;
for (x=0; x
{
if( derString[x:x] „“ == dasZeichen „“)
{
dieLetztePosition=x;
break;
}
}
return dieLetztePosition;
}
// Alle Zeichen links und rechts abschneiden
string trim(string einString)
{
return leftTrim(rightTrim(einString)) „“;
}
// Ersetze Zeilen in einem String
string replaceLines(string content, int startLine, int targetLine, string toReplace)
{
string newContent=““;
Array stringLines = split(„\n“, content);
int stringLineCount=getArraySize(stringLines);
if(startLine>targetLine)
{
return „replaceLines: the start index is bigger than the target index“;
}
if(startLine==-1||targetLine==-1)
{
return „replaceLines: Select start and target index bigger or equal to zero“;
}
int i=0;
for(i=0;i
Pingback: IBM Doors DXL: Tipps und Tricks | Capri-Soft Knowledge database
Erstens vielen dank fuer das DXL String Software. Ich habe etwas unerwartetes gefunden. Ein Bug:
string testString=“irdent_etwas_rate_class“
string part=“_class“
string part1=“class“
index = indexOf(testString, part)
print index“ should be 17 but is -1\n“
index = indexOf(testString, part1)
print index“ should be 18 and is 18\n“
Das Problem kommt von contains().
VG aus Atlanta
EW