LabVIEWForum.de
Binärdatei nach .txt datei - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Binärdatei nach .txt datei (/Thread-Binaerdatei-nach-txt-datei)



Binärdatei nach .txt datei - Martin Heller - 09.12.2011 11:25

Hallo Zusammen

Kann mir jmd helfen.
Ich habe eine Binärdatei, welche mit Matlab erstellt wurde und möchte diese in Labview einlesen und dann weiter bearbeiten.
Zur Zeit wurde es mit einem .c-Code umgewandelt. Leider sind meine .c Kenntnisse sehr bescheiden.
Gibt es eine einfache Variante, um diese Datei mit Labview umzuwandeln?

mfg Martin

PS: Habe diesen Link im Forum gefunden, jedoch habe ich kein Matlab

Anhang: Decode c-File;


c-Code:
Zitat:/*this decode program works under windows - no clue if this also works under linux - i doubt so...*/
/* syntax is decode.exe xxxxx.datalog */
/* this converts the datalog file to a textfile with max 50 spotentries - so if the file containes more spots you have to change this...*/
qa

# include <stdlib.h>
# include <stdio.h>
# include <string.h>

# define BUFF 64
# define MAXNBR 64

int main( int argc, char * argv[] )
{

int i[BUFF],j,counts,lastnbr,firstnbr;
int fsize,ii[20000],q,t;
char workstr[16],str[1024];
int maxspots=50;

FILE *fd;
FILE *fout;

fd = fopen (argv[1],"r");
if (fd == NULL)
{
printf( "Error opening infile: %s\n", argv[1] );
return 0;
}

fread (&ii,20000,1,fd);
close(fd);

/*create the filename of the outputfile*/
sprintf(str,"%s_txt",argv[1]);

fout = fopen (str,"w");
if (fd == NULL)
{
printf( "Error opening outfile: %s\n", str );
return 0;
}

/*
spot presappl delay mon1dose mon2dose usum tsum uexp ucal texp tcal ufwhexp ufwhcal tfwhexp tfwhcal hexp hcal x y z range1 range2 clockungat clockantia ADG3nominal ADG3actual clkSUMgat clkSUMungat mon1SUMungat mon1SUMgat mon2SUMungat ILK-Flag Kleak_corr mon2gt dmaf1 LBinzIC dmad1l dmad1r kma3 kma5 ama1 mon1ungat mongungat guardungat mon1gtA ame1 ame2 mmac3a alpha beta beta_ex fme1L fme1R mmec1a miniStrT0 miniStrT1 miniStrT2 miniStrT3 miniStrT4 miniStrU0 miniStrU1 miniStrU2 miniStrU3 miniStrU4
*/
firstnbr=lastnbr=counts=0;

q=0;
i[0]=1;
/*write first line*/
printf("spot presappl delay mon1dose mon2dose usum tsum uexp ucal texp tcal ufwhexp ufwhcal tfwhexp tfwhcal hexp hcal x y z range1 range2 clockungat clockantia ADG3nominal ADG3actual clkSUMgat clkSUMungat mon1SUMungat mon1SUMgat mon2SUMungat ILK-Flag Kleak_corr mon2gt dmaf1 LBinzIC dmad1l dmad1r kma3 kma5 ama1 mon1ungat mongungat guardungat mon1gtA ame1 ame2 mmac3a alpha beta beta_ex fme1L fme1R mmec1a miniStrT0 miniStrT1 miniStrT2 miniStrT3 miniStrT4 miniStrU0 miniStrU1 miniStrU2 miniStrU3 miniStrU4");
fputs("spot presappl delay mon1dose mon2dose usum tsum uexp ucal texp tcal ufwhexp ufwhcal tfwhexp tfwhcal hexp hcal x y z range1 range2 clockungat clockantia ADG3nominal ADG3actual clkSUMgat clkSUMungat mon1SUMungat mon1SUMgat mon2SUMungat ILK-Flag Kleak_corr mon2gt dmaf1 LBinzIC dmad1l dmad1r kma3 kma5 ama1 mon1ungat mongungat guardungat mon1gtA ame1 ame2 mmac3a alpha beta beta_ex fme1L fme1R mmec1a miniStrT0 miniStrT1 miniStrT2 miniStrT3 miniStrT4 miniStrU0 miniStrU1 miniStrU2 miniStrU3 miniStrU4",fout);

/*while (fread (&i,4*BUFF,1,fd)) */
while (i[0]>0)
{
for (t=0;t<BUFF;t++)
{
i[t]=ii[q*BUFF+t];
}

q++;

if (i[0] > 0)
{
if (firstnbr == 0) firstnbr=i[0];

if (lastnbr <= i[0]) /*spotnumbers are always increasing! */
{
lastnbr=i[0];
counts++;
sprintf(str,"\n");
for (j=0;j<MAXNBR;j++)
{
sprintf(workstr," %d",i[j]);
strcat(str,workstr);
}
fputs(str,fout);
printf("%s",str);
}
else if (i[0] == 1) /*more than 1 field in the binary file*/
{
printf("\n%d lines, Spot %d ... Spot %d\n",counts,firstnbr,lastnbr);
lastnbr=i[0];
counts=1;
sprintf(str,"\n");
for (j=0;j<MAXNBR;j++)
{
sprintf(workstr," %d",i[j]);
strcat(str,workstr);
}
fputs(str,fout);
}
}
}

fclose(fd);
fclose(fout);

printf("\n%d lines, Spot %d ... Spot %d\n",counts,firstnbr,lastnbr);


}



RE: Binärdatei nach .txt datei - Martin Heller - 09.12.2011 12:28

Edit: Diese Binärdatei wurde nicht mit Matlab erstellt. Habe eine falsche Information bekommen.


RE: Binärdatei nach .txt datei - unicorn - 09.12.2011 22:54

Beim Einlesen von Binärdateien muss man auf die Reihenfolge der Bytes achten. Es gibt das Big-Endian (Motorola) und das Little-Endian (Intel) Format. Ggf. muss man die Bytefolge beim Einlesen umtauschen. LabView arbeitet mit Big-Endian und Windows c- und c++ Programme in der Regel mit Little-Endian.


RE: Binärdatei nach .txt datei - gentos - 10.12.2011 15:53

Scheint ne Datenbank-Datei zu sein...


RE: Binärdatei nach .txt datei - Martin Heller - 15.12.2011 09:02

Vielen Dank für eure Antworten

Zitat:Beim Einlesen von Binärdateien muss man auf die Reihenfolge der Bytes achten. Es gibt das Big-Endian (Motorola) und das Little-Endian (Intel) Format. Ggf. muss man die Bytefolge beim Einlesen umtauschen. LabView arbeitet mit Big-Endian und Windows c- und c++ Programme in der Regel mit Little-Endian.
Leider gibt es keine Veränderung, wenn ich zwischen Little-und Big-Endian wechsle.
es kommt "nur" 'Kabis' raus...
gibt es noch etwas anderes, welches ich beachten muss?

mfg Martin


RE: Binärdatei nach .txt datei - Lucki - 15.12.2011 11:07

Um das Problem zu lösen, müßtest Du jemand finden, der die das gepostete C-Programm analysiert und herausfindet, in welchen Formaten welche Variablentypen in welcher Reihenfolge gespeichert werden. Das hier ist ein Labview-Forum, da kannst Du nicht unbedingt erwarten dass das jemand macht. Wenn das dann klar ist, dann ist es ein Klacks, die Daten mit Labview zurückzulesen - und dabei kann Dir auch das Labview-Forum helfen.