PDA

Vollständige Version anzeigen : Messwerte (Text) aus Memo Feld extrahieren


kibit on sight
26.04.2011, 09:20
Hallo zusammen,

habe mal wieder ein kleines Problem aus der Messdatenverarbeitung zu lösen:

Ich bekomme in einer Accesstabelle pro Datensatz ein Memofeld geliefert, das folgenden Inhalt hat:

maximal 1024 Werte (Text <= 10 Zeichen)
alle Werte sind durch ein Carrige Return getrennt

in etwa so:

0.123456
1.234567
2.345678

und das halt maximal 1024 mal.

Das Ziel ist, diese Messwerte zum einen als Tabelle und zum anderen als Kurve in einem Bericht (Formular) darzustellen. Natürlich sollte ich auch anstatt einem Punkt ein Komma als Dezimaltrennzeichen haben, sonst geht ja sowieso nichts.

In der Y Achse die Messwerte und in der X Achse die fortlaufende Nummer (es geht im Prinzip um einen Sinus)

Also folgende Tabelle (Array):

1 0,12345
2 1,23456
3 2,34567 und so weiter

Gibt es in Access eine Arrayfunktion mithilfe derer ich den String splitten kann oder muss man das zu Fuss erledigen (for i = 1 to ...)?

Wie kann die Tabelle graphisch dargestellt werden (habe ich noch nie gemacht). Im Prinzip ist es ja ein Pivot, aber das Pivot basiert ja auf einer echten Tabelle!
Und wie kann ich dann ein solches Element in einem Bericht platzieren?

Vielen Dank jetzt schon für Tipps von euch

Frank200
26.04.2011, 09:36
Gibt es in Access eine Arrayfunktion mithilfe derer ich den String splitten kann ... ?
Heißer Tip: Gib mal in der OLH "split" ein.
Diese Funktion gibt Dir Deinen Text aufgespalten in einem Array zurück.
Als Delimiter versuche es mit einem Zeilensprung Chr(13) & Chr(10)

ebs17
26.04.2011, 09:37
"Memofeld mit Inhalt ...": Eine richtige Detailtabelle wäre besser. So muss man die erst erzeugen.
Arrayfunktion mithilfe derer ich den String splitten kann
Die VBA-Funktion Split erzeugt ein Variant(String)-Array:
Dim vArr As Variant, i As Long
vArr = Split(DeinString, vbCr) ' evtl. vbCrLf als Trennzeichen
For i = 0 To UBound(vArr)
Debug.Print vArr(i), CDbl(Replace(vArr(i), ".", ","))
' Erzeugen eines Tabelleneintrages
Next

kibit on sight
26.04.2011, 11:52
Hi Frank, SPLIT war wirklich ein heisser Tip.

Allerdings ist das nur der erste Teil:



Dim test() As String
Dim test_number(1024)
Dim low_limit As Integer
Dim high_limit As Integer

test = Split(Me.WAVEDATA, Chr(13) & Chr(10))

low_limit = LBound(test)
high_limit = UBound(test)

For i = low_limit To high_limit
test_number(i) = Val(test(i))
Next i



Nun muss ich ja entweder aus dem array oder aus einem query eine Tabelle (x/y) Werte und eine Graphik bauen ... und im Bericht anzeigen, vielleicht gibt es ja auch irgendein Steuerelement das das kann?

kibit on sight
26.04.2011, 11:59
For i = 0 To UBound(test)
test(i) = CDbl(Replace(test(i), ".", ","))
Next i

Danke, sieht auch schick aus, und funktioniert ...

Atrus2711
26.04.2011, 12:13
Hi,

die EInzelwerte kannst du per Recordset an eine geeignete Zieltabelle anfügen.

Etwa so:
Dim rst as dao.recordset
dim db as dao.database
dim Laufvariable as long
Set rs = db.Openrecordset("Tabelle")
With rst
For Laufvariable = Lbound(DeinArray) To UBound(DeinArray)
.addNew
!Feldname = DeinArray(Laufvariable)
.Update
Next Laufvariable
End With

kibit on sight
26.04.2011, 12:36
mmh, der Hintergrund ist der, dass pro 1024 Messwerte nur ein Datensatz erzeugt wird, ich bekomme die Daten von einer Messdatensoftware so geliefert.

Atrus2711
26.04.2011, 12:40
Darum wird das ja aufgespalten: aus einem Satz mach viele. Ich dachte, darum gehts auch?! :confused:

kibit on sight
26.04.2011, 13:13
Genau, vielen Dank, das ist zunächst die Lösung für meine temporäre Tabelle:

Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim j As Long
Set db = CurrentDb
Set rst = db.OpenRecordset("tbl_temp")
With rst
For j = LBound(test) To UBound(test)
.AddNew
!x_Wert = j + 1
!y_Wert = test(j)
.Update
Next j
End With

kibit on sight
26.04.2011, 13:16
Nochmals vielen Dank für die hilfreichen Ansätze und Tipps:

Aus der temporären Tabelle mache ich letztendlich ein Pivotformular und bette dieses in einen Bericht ein.

Schöne Woche noch allen:)