Autor Beitrag
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Fr 15.08.14 21:47 
Gemeint ist die Dateiposition $1800=dezimal 6144
Davor stehen nur wenige Daten, ein paar Details zur Messung im Klartext.
Erst ab der o.g. Dateiposition fangen die Meßwerte an.
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Fr 15.08.14 22:14 
Ah ok, das sieht in meinem Editor etwas anders aus "ox1800", ich habe immer nach dem $ Zeichen gesucht. Aber die Nummer finde ich in dem Stream doch nicht wieder!? Oder etwa doch? Gut, wenn ich sie von Ende zum Anfang einlese und die Schleife immer bei "0000 0000" verlasse solte doch das selbe raus kommen. Ich denke das ich die Daten falsch einlese und daher kommen die obskuren Zahlen. Daher meine Frage ob es eine fertige Methode zum lesen gibt, oder muss ich die Logik selbst erstellen?

_________________
Gruß
Christoph
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 15.08.14 22:27 
Hallo Christoph,

unten ein Code, der läuft, quick-and-dirty. Zu den $1800: Das sieht man mit jedem Hex-Viewer: Vorher sieht es recht unstrukturiert aus, man sieht den Text "HP Agilent....", aber ab $1800 sind die Zeilen alle gleich strukturiert: 2 x (4 x 0, 4 x Zeichen); Die Zeichen enden immer mit E40 o.ä.


Gruß GuaAck


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
UNIT UHp_Gas;

INTERFACE

USES
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

TYPE
  TForm1 = CLASS(TForm)
    Button1: TButton;
    Memo1: TMemo;
    PROCEDURE Button1Click(Sender: TObject);
  PRIVATE
    { Private-Deklarationen }
  PUBLIC
    a: ARRAY[0..100000OF single;
    { Public-Deklarationen }
  END;

VAR
  Form1: TForm1;

IMPLEMENTATION

{$R *.dfm}

PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
  f: FILE OF single;
  i: integer;
  dummy: single;
BEGIN
  assignfile(f, 'Test88.txt');
  ReSet(f);
  FOR i := 0 TO ($1800 DIV 4) - 1 DO
    Read(f, dummy);
  i := 0;
  WHILE NOT eof(f) DO
    BEGIN
      Read(f, a[i]);
      IF (i < 20AND ((i MOD 2) = 1THEN
        Memo1.Lines.Add(floattostr(a[i]));
      i := i + 1;
    END;
  closefile(f);
  Memo1.Lines.Add(inttostr(i) + ' Werte eingelesen');

END;

END.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 15.08.14 22:41 
Und hier in C# (weil ich's schon fertig hatte, bevor ich GuaAcks Beitrag gesehen habe :D):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      var filename = @"d:\downloads\Test88.txt";

      var bytes = File.ReadAllBytes(filename);

      var sb = new StringBuilder();
      for(int i = 0x1800; i < bytes.Length; i+=8 ) {
        var value = BitConverter.ToDouble(bytes, i);
        sb.AppendLine(value.ToString());
      }

      File.WriteAllText(@"d:\downloads\Test88_out.txt", sb.ToString());

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 16.08.14 09:57 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Und hier in C# (weil ich's schon fertig hatte, bevor ich GuaAcks Beitrag gesehen habe :D):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      var filename = @"d:\downloads\Test88.txt";

      var bytes = File.ReadAllBytes(filename);

      var sb = new StringBuilder();
      for(int i = 0x1800; i < bytes.Length; i+=8 ) {
        var value = BitConverter.ToDouble(bytes, i);
        sb.AppendLine(value.ToString());
      }

      File.WriteAllText(@"d:\downloads\Test88_out.txt", sb.ToString());


Danke dir! Meine Vorgehensweise war komplett falsch. Ich habe viel zu kompliziert gedacht, jetzt wo ich sehe wie einfach man das halten kann, ist mir das schon etwas peinlich :oops:

Ich denke ich muss mir noch eine andere Lösung für den Startpunkt x01800 suchen. Dieser wird ja nicht statisch sein, oder etwa doch ?

Falls doch noch Fragen auftauchen werde ich mich wieder hier melden :P

Also, vielen Dank an alle! Ohne eure Hilfe hätte ich das nicht hinbekommen!

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Mo 18.08.14 16:47 
Hallo zusammen,

das Problem ist scheinbar doch nicht gelöst. Und zwar habe ich eine neue Datei, von einem anderen, aber identischem Gerät. Aus dieser Datei bekomme ich einfach keine plausiblen Werte.

Ich habe auch schon den Index hin und her geschoben, da kommt einfach nichts passendes raus. Wenn ich die alte Datei nach und nach ab 0 einlese, kann man genau erkennen ab wann die Datenreihe der Messung beginnt und die Daten machen sinn. Jetzt sieht man auch wann die Reihe beginnt, aber die Werte machen einfach keinen sinn.

Ich habe einfach keine Idee was ich da falsch mache. Wäre es möglich das ihr euch die neue Datei mal anschaut?

Anbei die Datei:
Einloggen, um Attachments anzusehen!
_________________
Gruß
Christoph
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 18.08.14 20:34 
Jeder einzelne der Messwerte ist ein NaN (warum merkt Tiny Hexer das eigentlich nicht?)... sicher, dass das Messgerät auch was gemessen hat?

Immerhin, mit 2 Dateien hätte man jetzt schon eine realistische Chance den Dateikopf zu untersuchen.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
gehstock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Mo 18.08.14 21:32 
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mo 18.08.14 21:52 
Für mich ist Test89 ein "File of Array[0..3] of 16_bit_integer" als BIG Endian (!!), Offset ist wieder wie gehabt $1800.

Logisch, nur eine Schätzung, jedenfalls vollkommen anders als Test88.

Gruß
GuaAck
gehstock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Mo 18.08.14 22:05 
Test88 R e v . C . 0 1 . 0 5 [ 3 5 ]
Test89 R e v . C . 0 1 . 0 3 [ 3 7 ]

Vieleicht hat sich mit der Firmware auch das Dateiformat geändert
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Mo 18.08.14 22:19 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Jeder einzelne der Messwerte ist ein NaN (warum merkt Tiny Hexer das eigentlich nicht?)... sicher, dass das Messgerät auch was gemessen hat?

Immerhin, mit 2 Dateien hätte man jetzt schon eine realistische Chance den Dateikopf zu untersuchen.

Also mein Hex Editor bei der Arbeit hat das auch nicht gemerkt, ich auch nicht :-)

Ich hatte mir schon extra eine neue Datei rausgesucht um sicher zu sein das ich keinen abgerochenen Lauf untersuche.


user profile icongehstock hat folgendes geschrieben Zum zitierten Posting springen:
Eventuell das hier ? code.google.com/p/as...#git%2Faston%2Fpeaks

Ich denke das hilft mir nicht wirklich weiter, aber trotzdem vielen Dank für den Link!

user profile icongehstock hat folgendes geschrieben Zum zitierten Posting springen:
Test88 R e v . C . 0 1 . 0 5 [ 3 5 ]
Test89 R e v . C . 0 1 . 0 3 [ 3 7 ]

Vieleicht hat sich mit der Firmware auch das Dateiformat geändert

Ah sehr gut, DANKE! Da hätte ich auch mal selbst drauf kommen können :wink:

Gut, wenn ich jetzt noch wüsste wie wie man da brauchbare Daten rausbekommt, könnte ich mich gut darauf einstellen. Ist gut möglich das es noch weitere Firmeware Versionen gib, wir haben 10 Geräte. Mit Updates und Neuanschaffungen könnte das ein Dauerthema für mich werden :gruebel:

_________________
Gruß
Christoph
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 18.08.14 23:41 
user profile iconChristoph1972 hat folgendes geschrieben Zum zitierten Posting springen:
Ist gut möglich das es noch weitere Firmeware Versionen gib, wir haben 10 Geräte. Mit Updates und Neuanschaffungen könnte das ein Dauerthema für mich werden :gruebel:
Hm, da müssten die ja die Auswertesoftware auch ständig patchen. Mal vergleichen, vielleicht gibts ja einen Datentyp-Identifier oder sowas.

Sicher, dass das Test89 komplett war? Bei 0x1074 ist in der anderen Datei sowas wie ein Kanalbezeichner, und vorher kommt mehrfach etwas was ich für Min/Max-Werte halten würde - in dieser Datei ist das +INF und NAN.

Edit2: Och menno, ich wollte doch was ganz anderes machen :rofl:
user defined image

Ich hab mal etwas rumgebastelt, so macht das mehr Sinn, ist aber auch noch nicht komplett. Was in dem record D1..D7 und A..J heißt sind die Stellen, wo ich keine Ahnung hab was das ist. Oh, und die zweite Datei ist auch nicht wirklich lesbar, aber falls das was ich "flags" getauft hab Flags sind, steht das da vielleicht sogar drin :lol:

Einheit picoAmpere? Wär jetzt die Frage was der Detektor dort tut, aber irgendwas mit Ionisation und Leitfähigkeit ists ja, wär also nicht so unerwartet.
Einloggen, um Attachments anzusehen!
_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 19.08.14 06:52 
Guten Morgen

Ja das mit dem patchen ist mir auch ein Dorn im Auge. Zudem muss ich ja damit rechnen, das ich die Datei irgendwann nicht mehr ausgelesen bekomme, vielleicht nicht mal mit eurer Hilfe!


Da ich mir nur zu 99% sicher bin das die Datei ok ist, werde ich noch mal eine neue raussuchen, die ich zuvor selbst auswerte.


Genau die Einheit ist pA, das Signal kommt von einem FID (Flammenionisationsdetektor).

Schade, dein Projekt kann ich mir nicht anschauen, bin C#er.


Vielen Dank für eure Unterstützung, das ist echt super!

_________________
Gruß
Christoph
gehstock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Di 19.08.14 09:05 
Mach mal mehrere logs pro gerät das würde weiterhelfen

Für diesen Beitrag haben gedankt: Martok
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 19.08.14 23:36 
Hi,


user profile icongehstock hat folgendes geschrieben Zum zitierten Posting springen:
Mach mal mehrere logs pro gerät das würde weiterhelfen


Öhm, du meinst sicher Läufe/Runs, oder Logfiles?

Also, heute hatte ich leider nur wenig Zeit. Ich habe nur raus gefunden, das es nicht an der Firmware liegt. Ein weiters Gerät hat die selbe Firmware und die Datei kann ich auswerten. Die von uns nicht auswertbaren Dateien stammen von gültigen Messungen, das hatte ich auch noch mal kontrolliert. Auch die interne Export Funktion spuckt die Daten der X,Y Punkte korrekt aus. Die ChemStation hat scheinbar keine Problem ihr Format zu lesen :suspect:

Morgen werde ich mal von allen Geräten CH Files zusammen suchen und prüfen ob es noch weitere Geräte gibt die nicht gelesen werden können.

_________________
Gruß
Christoph
Christoph1972 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Mi 20.08.14 20:16 
Heute habe ich mir eine Demo Version runtergeladen und installiert. Diese hat kein Problem die Dateien einzulesen und es wird alles korrekt gezeichnet. Es muss also ein Trick geben. Hat vielleicht noch jemand eine weitere Idee?

_________________
Gruß
Christoph
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 21.08.14 00:17 
ALso ich bin kein Profi :mrgreen: aber hast du schon versucht die Demo zu dekompilieren? Dann könntest du dort nach der Formatierung schauen.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler