Seite 1 von 1

CSVToArray

Verfasst: 27. November 2017, 10:55
von FDominicus
Sieht so aus, als ob ich mal wieder etwas überhaupt nicht verstehe:
Gegeben ist folgende Text Datei:
1;2;3
4;5;6

Und hier der Code

Code: Alles auswählen

TestProc()
	fileToReadFrom is string
	aLine is string
	arrTest is array of string
	fileToReadFrom = fExeDir() + "\..\test.txt"
	
	fileID is int
	fileID = fOpen(fileToReadFrom)
	aLine = fReadLine(fileID)
	CSVToArray(aLine, arrTest)
	Trace(arrTest[1])
	

Das einlesen klappt und nach dem Einlesen habe ich in aLine
"1;2;3" stehen und nach
CSVToArray
arrTest[1] = "1;2;3"

warum nicht
arrTest[1] = 1
arrTest[2] = 2
...

Benutze ich SplitString bekomme ich das Ergebnis, was ich erwarte.

Lese ich die ganze Datei so ein

Code: Alles auswählen

PROCEDURE TestProc2()
fileToReadFrom is string
sContent is string
arrTest is array 2 by 3 string
fileToReadFrom = fExeDir() + "\..\test.txt"

sContent = fLoadText(fileToReadFrom)
CSVToArray(sContent, arrTest)
Trace(arrTest[1,1])

Bekomme ich auch die erwarteten Zeilen mit 3 Elementen......

Re: CSVToArray

Verfasst: 27. November 2017, 12:29
von Herbert
Setze zur Sicherheit das ; als Separator ein, weil

Separator used to separate the values of the different columns. By default, the column separator used corresponds to "list separator" found in the regional settings of Windows.

also

Code: Alles auswählen

 CSVToArray(aLine, arrTest,";")

Re: CSVToArray

Verfasst: 27. November 2017, 14:19
von FDominicus
Gemacht

Code: Alles auswählen

PROCEDURE TestProc()
	fileToReadFrom is string
	aLine is string
	arrTest is array of 5 string
	fileToReadFrom = fExeDir() + "\..\test.txt"
	
	fileID is int
	fileID = fOpen(fileToReadFrom)
	aLine = fReadLine(fileID)
	CSVToArray(aLine, arrTest, ";")
	Trace(arrTest[1])
	
		
Content von arrTest

Code: Alles auswählen

arrTest	
[1]	1;2;3


Re: CSVToArray

Verfasst: 28. November 2017, 21:46
von Herbert
Also, dieser Befehl ist für uns nicht ganz logisch, aber wenn man die Erklärung liest, klar:
For a one-dimensional array, the string will be cut according to the CR characters (Carriage Return).
For a two-dimensional array, the string will be cut according to the CR characters (Carriage Return), then according to the separator of columns. The elements will be added row by row.
hier: http://doc.windev.com/?1000017097&lang= ... 01A210067f

Also das Trennzeichen muss bei 1dim-Array ein CR sein.

Code: Alles auswählen

aLine is string
arrTest is array of 2 strings
aLine="1;2;3"
aLine=Replace(aLine,";",CR)
CSVToArray(aLine, arrTest)
Trace(arrTest[1])

Re: CSVToArray

Verfasst: 30. November 2017, 14:42
von FDominicus
Gelesen habe ich die Beschreibung aber offenkundig nicht vestanden. Ich dachte mit dem Separator wird es "glatt" gestellt.
Danke bin ich nicht selber drauf gekommen