Office - Word, Excel und Co. 9.753 Themen, 41.606 Beiträge

Knifflige Datenbanksortierung

flo_1 / 5 Antworten / Baumansicht Nickles
Hallo Leute!

Stehe vor einem - meiner Meinung nach - sehr kniffligem Problem: Ich habe eine Textdatei mit verschiedenen Messergebnissen und möchte diese Auswerten. Die Sortierung soll so erfolgen, dass für jedes Datum und Zeit die dazugehörigen Messdaten in einem Datensatz stehen.

Die Textdatei sieht folgendermaßen aus:







Measure:    1  Time: Mar 23 11:24:18 2004
Analog Inputs:
C-01:   0.0 ÿÿ AC-02:   4.8 ÿÿ AC-03:   6.3 ÿÿ AC-04:   6.2 ÿÿ AC-05:   5.4 ÿÿ AC-06:   6.4 ÿÿ A
C-07:  14.2 ÿÿ AC-08: 180.0 ÿÿ AC-09: 180.0 ÿÿ AC-10:  15.3 ÿÿ AC-11: 180.0 ÿÿ AC-12:  15.5 ÿÿ A
C-13: 180.0 ÿÿ AC-14:  13.1 ÿÿ AC-15:  65.2 ÿÿ AC-16:  65.4 ÿÿ AC-17:  59.8 ÿÿ AC-18:   0.1 ÿÿ A
C-19:   0.0 ÿÿ AC-20: 180.0 ÿÿ AC-21:  59.3 ÿÿ AC-22: 180.0 ÿÿ AC-23:  41.8 ÿÿ AC-24:  15.2 ÿÿ A
C-25:  16.5 ÿÿ AC-26:   9.8 ÿÿ A
Analog Outputs:
C-01:   0.0 ÿÿ AC-02:   0.0 ÿÿ AC-03:   0.0 ÿÿ A
Relais: 1: 0, 2: 0, 3: 0, 4: 0
Data-Next: <far>0027:0070H

Measure:    2  Time: Mar 23 11:50:31 2004
Analog Inputs:
C-01:   0.0 ÿÿ AC-02:   5.1 ÿÿ AC-03:   6.4 ÿÿ AC-04:   6.3 ÿÿ AC-05:   5.5 ÿÿ AC-06:   6.3 ÿÿ A
C-07:  14.1 ÿÿ AC-08: 180.0 ÿÿ AC-09: 180.0 ÿÿ AC-10:  15.8 ÿÿ AC-11: 180.0 ÿÿ AC-12:  15.6 ÿÿ A
C-13: 180.0 ÿÿ AC-14:  13.6 ÿÿ AC-15:  68.2 ÿÿ AC-16:  62.3 ÿÿ AC-17:  58.4 ÿÿ AC-18:   0.0 ÿÿ A
C-19:   0.0 ÿÿ AC-20: 180.0 ÿÿ AC-21:  60.2 ÿÿ AC-22: 180.0 ÿÿ AC-23:  40.7 ÿÿ AC-24:  15.2 ÿÿ A
C-25:  16.5 ÿÿ AC-26:  10.7 ÿÿ A
Analog Outputs:
C-01:   0.0 ÿÿ AC-02:   0.0 ÿÿ AC-03:   0.0 ÿÿ A
Relais: 1: 0, 2: 0, 3: 0, 4: 0
Data-Next: <far>0027:00E0H

C-01 bis C-026 sind die benötigten Messwerte die ich dem jeweiligem Datensatz zuordnen möchte. Hab die Sortierung bereits mit einem kleinem Delphi Programm versucht - bin aber leider gescheitert.
Wäre über eure Hilfe sehr dankbar!!

Mit freundlichen Grüßen

Flo
bei Antwort benachrichtigen
Posejdon flo_1 „Knifflige Datenbanksortierung“
Optionen

Am besten mit Finereader OCR einscannen und in Exeldatei umwandeln.Oder?

bei Antwort benachrichtigen
Uli M flo_1 „Knifflige Datenbanksortierung“
Optionen

Hallo Flo,

Aus dem Posting in der Form geht leider der Aufbau der Input-Datei nur sehr bedingt hervor. Insb. ist nicht erkennbar, wann wirklich neue Zeilen beginnen.
Ein Output soll (vorerst z.B. asl *.csv) etwa so aussehen?

Mar 23 11:24:18 2004;0.0 ÿÿ A;4.8 ÿÿ A;...
Mar 23 11:50:31 2004;0.0 ÿÿ A;5.1 ÿÿ A;...

Gruß
Uli

bei Antwort benachrichtigen
flo_1 Uli M „Hallo Flo, Aus dem Posting in der Form geht leider der Aufbau der Input-Datei...“
Optionen

Die Input Datei sieht genauso aus wie abgebildet bis auf die Zeilenumbrüche vom "A". C-01, C-07, C-13, C-19 und C-25 stehen genau untereinander. Der erste Output sollte genauso aussehen wie du es angegeben hast! Damit wäre mir schon sehr geholfen!

Besten Dank

Flo

bei Antwort benachrichtigen
Uli M flo_1 „Knifflige Datenbanksortierung“
Optionen

Hallo Flo,

Ich war einige Tage nicht online - ist das Problem noch ungelöst?
Zwischen "Analog Inputs:" und "Analog Outputs:" steht also jeweils genau 1 Zeile?
Nur diese ist ausser dem Datum nach "Measure ..." zuvor relevant (wobei hier stets der 2. Doppelpunkt trennt?)?

Gruß
Uli

bei Antwort benachrichtigen
tuxfriend flo_1 „Knifflige Datenbanksortierung“
Optionen

Falls das Problem noch besteht habe ich hier eine Lösung in VBA für die Messwertübernahme in EXCEL:
--------------------------------------------------------------------
Option Explicit

Dim TextZeile, TeilText, dlgAnswer
Dim Datum, inoutText, datenText

Dim iInt As Integer
Dim iStr As String

Dim wrksht As Worksheet
Dim objList As ListObject
Dim objListRng As Range

Sub main()
Debug.Print "Messwertwandlung"
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
dlgAnswer = .SelectedItems(1)
End With
Open dlgAnswer For Input As #1
iInt = 1
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, TextZeile
iStr = "A" + LTrim(Str(iInt))
If Left(TextZeile, 8) = "Measure:" Then
Datum = Mid(TextZeile, 22, 20)
End If
If Left(TextZeile, 14) = "Analog Inputs:" Then
inoutText = "Input"
End If
If Left(TextZeile, 15) = "Analog Outputs:" Then
inoutText = "Output"
End If
If Left(TextZeile, 2) = "C-" Then
datenText = TextZeile
End If

Worksheets("Tabelle1").Activate
Worksheets("Tabelle1").Range(iStr).Activate
ActiveCell.Value = Datum
ActiveCell.Next.Select
ActiveCell.Value = inoutText
ActiveCell.Next.Select
ActiveCell.Value = datenText
iInt = iInt + 1
Loop
Close #1
End Sub
-------------------------------------------------------------------

bei Antwort benachrichtigen