Liebe Gäste des Forums
Danke, dass ihr euch hier auf dem inoffiziellen Windev-Forum umschaut. Hier werden Tipps und Hinweise zu der von PC-Soft angebotenen Software Windev besprochen.
Windev ist eine leistungsstarke, sehr umfangreiche Entwicklersoftware für Webseiten, Handys und Rechner verschiedener Betriebssysteme. Mehr unter http://www.windev.com

CSVToArray

Alle Themen rund um die Erstellung von Programmen
Antworten
FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

CSVToArray

Beitrag von FDominicus » 27. November 2017, 10:55

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......

Herbert
Site Admin
Beiträge: 366
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: CSVToArray

Beitrag von Herbert » 27. November 2017, 12:29

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,";")

FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

Re: CSVToArray

Beitrag von FDominicus » 27. November 2017, 14:19

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


Herbert
Site Admin
Beiträge: 366
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: CSVToArray

Beitrag von Herbert » 28. November 2017, 21:46

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])

FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

Re: CSVToArray

Beitrag von FDominicus » 30. November 2017, 14:42

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

Antworten