Mehrere Zahlen

09/21/2013 11:44 RettAss#1
Tach zsm
hab da folgendes Problem und zwar such ich eine elegante lösung um mehrere zahlen die in einer zeile stehen und nur durch eine leerzeile getrennt sind auszulesen. folgendes bsp.:

Ich habe ne .txt datei, der inhalt sieht folgendermaßen aus:
PHP Code:
100 221 30 4 800 5250 
X zahlen, die unterschiedlich "lang" sind und wie schon gesagt nur durch eine leerzeile getrennt sind.
Das Format ist nicht änderbar, da dies z.b. von einem Programm oder Tabelle ausgelesen wird, auf die ich keinen einfluss habe.
Wie lese ich nun am besten aus...

a.) wie viele zahlen in der zeile stehen
b.) den wert der jeweiligen zahlen
c.) jede zahl einer Variable zuordnen

Mfg
09/21/2013 11:54 BladeTiger12#2
Mach es doch mit StringSplit.
Beispiel im Anhang.
09/21/2013 12:03 alpines#3
Sagen wir du hast "2 5 900 540" in einer Textdatei, so sieht es dann aus.

Hier als Script:
Code:
#include <Array.au3>

$hFile = FileOpen(".\\Zahlen.txt")
$sZahlen = FileRead($hFile)
FileClose($hFile)

$aZahlen = StringSplit($sZahlen, 2)

_ArrayDisplay($aZahlen, "Zahlen")

#cs
	$aZahlen[0] = 2
	$aZahlen[1] = 5
	$aZahlen[2] = 900
	$aZahlen[3] = 540
#ce
09/21/2013 12:18 RettAss#4
Quote:
Originally Posted by alpines View Post
Sagen wir du hast "2 5 900 540" in einer Textdatei, so sieht es dann aus.

Hier als Script:
Code:
#include <Array.au3>

$hFile = FileOpen(".\\Zahlen.txt")
$sZahlen = FileRead($hFile)
FileClose($hFile)

$aZahlen = StringSplit($sZahlen, 2)

_ArrayDisplay($aZahlen, "Zahlen")

#cs
	$aZahlen[0] = 2
	$aZahlen[1] = 5
	$aZahlen[2] = 900
	$aZahlen[3] = 540
#ce
Hmm das haut nicht ganz hin, bekomm dann folgendes array:

Code:
[0] = 2
	[1] = 
	[2] =5 900 540
09/21/2013 12:19 alpines#5
Sorry, hab da den Delimeter vergessen :D
Code:
#include <Array.au3>

$hFile = FileOpen(".\\Zahlen.txt")
$sZahlen = FileRead($hFile)
FileClose($hFile)

$aZahlen = StringSplit($sZahlen, " ", 2)

_ArrayDisplay($aZahlen, "Zahlen")

#cs
	$aZahlen[0] = 2
	$aZahlen[1] = 5
	$aZahlen[2] = 900
	$aZahlen[3] = 540
#ce
So ist es richtig.
09/21/2013 12:23 butter123#6
da du auch die anzahl der zahlen wissen willst würde ich
$aZahlen = StringSplit($sZahlen, " ")
benutzen, da dann im ersten eintrag noch die größe des arrays drin ist und du nciht nochmal extra mit ubound arbeiten musst.
09/21/2013 12:26 RettAss#7
Quote:
Originally Posted by alpines View Post
Sorry, hab da den Delimeter vergessen :D
Code:
#include <Array.au3>

$hFile = FileOpen(".\\Zahlen.txt")
$sZahlen = FileRead($hFile)
FileClose($hFile)

$aZahlen = StringSplit($sZahlen, " ", 2)

_ArrayDisplay($aZahlen, "Zahlen")

#cs
	$aZahlen[0] = 2
	$aZahlen[1] = 5
	$aZahlen[2] = 900
	$aZahlen[3] = 540
#ce
So ist es richtig.
Ok das kommt schon näher an die sache, nur is immer noch das eigentliche Problem vorhanden, da es nicht festgelegt is wie lange eine zahl ist liest er jeden jetzt jede spalte aus:

Code:
[0]|2
[1]| 
[2]|5
[3]| 
[4]|9
[5]|0
[6]|0
[7]| 
[8]|5
[9]|4
[10]|0
09/21/2013 12:27 alpines#8
Du bearbeitest mit UBound nichts, es spielt eigentlich keine Rolle ob man UBound verwendet oder nicht, da die Funktion das sonst selber macht.
Statt
Code:
For $i = 1 To $aZahlen[0] - 1
Next
benutzt man
Code:
For $i = 0 To UBound($aZahlen) - 1
Next
Es ist besser wenn man die Version ohne Größe im 1. Eintrag nimmt, da einige Funktionen Probleme damit haben.

// Hast du den Thread noch erwischt als der Delim auf "" war oder mit " "?

Ich schätze mit "", weil es mit " " nicht passieren kann solange die Datei so lautet: 2 540 958 560 ...
09/21/2013 12:31 RettAss#9
Quote:
Originally Posted by alpines View Post
Du bearbeitest mit UBound nichts, es spielt eigentlich keine Rolle ob man UBound verwendet oder nicht, da die Funktion das sonst selber macht.
Statt
Code:
For $i = 1 To $aZahlen[0] - 1
Next
benutzt man
Code:
For $i = 0 To UBound($aZahlen) - 1
Next
Es ist besser wenn man die Version ohne Größe im 1. Eintrag nimmt, da einige Funktionen Probleme damit haben.

// Hast du den Thread noch erwischt als der Delim auf "" war oder mit " "?

Ich schätze mit "", weil es mit " " nicht passieren kann solange die Datei so lautet: 2 540 958 560 ...
Ahh ok stimmt die "leerzeile" als delimeter hatte ich nicht, jetzt geht es super, Danke dir