IBM Doors DXL: Die fehlenden Stringfunktionen / The missing String functions

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 " “ stringOf(today, „yyyy-MM-dd“) „ “ getZeroPrefixedInt(hours) „:“ getZeroPrefixedInt(mins) „:“ getZeroPrefixedInt(secs) „

„;
}

// 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; igetArrayString(a,j);
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 speed optimization
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=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=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=startLine&&i<=targetLine) { if(i==startLine) { newContent=newContent "" toReplace "\n"; } } else { newContent=newContent "" stringZeile "\n"; } } return newContent; } [/javascript]

Über Björn Karpenstein

Diplom Informatiker, Programmierer, Musikbegeisterter
Dieser Beitrag wurde unter DXL, IBM DOORS veröffentlicht. Setze ein Lesezeichen auf den Permalink.

2 Kommentare zu IBM Doors DXL: Die fehlenden Stringfunktionen / The missing String functions

  1. Pingback: IBM Doors DXL: Tipps und Tricks | Capri-Soft Knowledge database

  2. Eric Winter sagt:

    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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.