22. Okt 2013

DE_flag GB_flag

for english readers

Eine Zeile Text in ein Array

line_2Array

Regelmäßig muß ich Text importieren, der Daten in tabellarischer Form enthält. Manche trennen Mac-üblich die Felder mit Tabulatoren ("\t") und die Datensätze mit Zeilenschalter ("\r"). Andere verwenden CSV und sind sehr phantasiebegabt, das C zu interpretieren. Die einen meinen das C stände für Char, die anderen es stände für Colon und benutzen ";", das Semikolon also, wieder andere nehmen ein "," und der Varianten sind viele.

Ich will das nicht jedesmal neu schreiben und so ist mir mein Dienstleister Line_2Array lieb geworden. Die Methode wird so aufgerufen

  • Line_2Array($zeileText;->$t_FeldArray)
  • dann sind Tabulator und Zeilenschalter die Feld- und Datensatztrenner oder ich rufe so auf
  • Line_2Array($zeileText;->$t_FeldArray;";";"\r")
  • dann sind Semikolon und Zeilenschalter die Feld- und Datensatztrenner oder
  • Line_2Array($zeileText;->$t_FeldArray;"\r";"*****")
  • dann lade ich alle Zeilen in Arrays und nehme erst danach die einzelnen Zeilen in Felder auseinander. Das "*****" hat sich bewährt, weil es idR nicht vorkommt.

Als Caveat sind zu erwähnen:

  • "\n" und "\r\n" oder ist es "\n\r" vorher zu behandeln
  • BLOB TO DOCUMENT und dann Convert to text mit der richtigen Codierung

Die Methode als Text.

DE_flag GB_flag

lieber auf deutsch

a row of text into an array

line_2Array

Every other day I need to import data from text. Some use tab-delimited text, where tabs ("\t") separate fields and ("\r") returns signal the end of a record. Others prefer csv and are very open to what c means. Some understand c as char, some as colon and use ";" which is semicolon to be precise. There are as many variants as there are data-providers, I suppose.

I'm not going to write code again and again. I've settled on Line_2Array. I call either

  • Line_2Array($rowText;->$t_FieldArray)
  • in this case tab and return are field- and record-delimiter, or I call
  • Line_2Array($rowText;->$t_FieldArray;";";"\r")
  • in this case semicolon and return are field- and record-delimiter, or I call
  • Line_2Array($rowText;->$t_FieldArray;"\r";"*****")
  • that means loading all rows into arrays and later parsing every arrayrow for fields. "*****" has proven usually not to be part of the textdata delivered.

Some caveats:

  • "\n" and "\r\n" or is it "\n\r" neat to be treated in advance
  • BLOB TO DOCUMENT and then Convert to text using the correct text-encoding

The method as text.