Hello!
Van egy bináris fájlom amiben
a mérési eredményeim vannak.
Az a próblémám, hogy ebből szeretném kinyerni az adatokat
rutinszerűen, hogy pl ábrázólni tudjam s
leközölni.
Egy hex editorral meg kerestem a header végét
a header mérete 837 byte, ettől kezdve vannak
az adatok real-ben, 8 byte egy szém
tehát mondjuk gy néz ki az első adatok:
01 AD D8 AB C1 4B 54 40 = 81,1837
F8 93 37 58 3F 85 52 40 = 74,08199
5C 81 05 16 60 6A 51 40 = 69,66211
.
.
.
Egészen az utól só adatigy (ezek amúgy áram erősségek.
Sajnos nem vagyok programoózó s csak fortranban tudok
valamennyire programozni, csa
a bináris filek megnyitását még nem csináltam.
S nem tudom hogy csinálhatnám meg ezt linux alatt.
Ha valakinek van valami ötlete az kérem segítsen.
- 1411 megtekintés
Hozzászólások
Szerintem c-ben relative egyszeruen meg lehet oldani:
#include <stdio.h>
int main(void)
{
FILE *f;
double d;
int i;
f=fopen("adatfile.dat","rb");
fseek(f,837L,SEEK_SET);
for ( i=0 ; i<ADATPONTOK_SZA'MA && ! feof(f) ; i++ )
{ fread((void *)&d,1,sizeof(double),f);
printf("%12g\n",d);
}
fclose(f);
return(0);
}
(fete've, hogy a file-ban a valos szamok reprezentalasa megegyezik az architektura'n haszna'lt reprezentaciojaval, de ha jollattom - es x86-rol van szo - akkor megegyezik ;))
A.
- A hozzászóláshoz be kell jelentkezni
Köszi tényleg műkszik,
akkor így a headerben is tudok pár paramétert kiolvasni.
Ha jól értem a struktúrát,
akkor mivel nem tuom a mennyi pont van egy fájlban,
de a manualban amit a géphez adtak benne van a max
ponok száma ami lehetséges s azt írom be.
- A hozzászóláshoz be kell jelentkezni
akkor így a headerben is tudok pár paramétert kiolvasni.
jaja, siman, csak
fseek()
-kel rapozicionalsz a megfelelo" helyre, es egy
fread((void *)¶m,1,sizeof(type),f);
hivassal kiolvasod az erteket, ahol
type
a
param
parame'ter tipusa (1 byte-os ege'sz: char, 2 byte-os: short, 4 byte-os: int, ...).
akkor mivel nem tuom a mennyi pont van egy fájlban,
de a manualban amit a géphez adtak benne van a max
ponok száma ami lehetséges s azt írom be.
eze'rt van a ciklusban a
! feof(f)
felte'tel is. ha elfogy a file, akkor is fejezze be a kiolvasa'st. de persze az is jo, hogyha valahonnan tudod hogy mennyi pont van a file-ban (pl. pont a header-bo"l).
A.
- A hozzászóláshoz be kell jelentkezni
A segítségeddel elkészült a kis
adat olcasó:
#include
int main(void)
{
FILE *f;
double d;
int i;
int NOF;
double vol [1];
double cur [1000];
double sav;
double step;
double out_v [1000];
f=fopen("07030821.iv","rb");
fseek(f,276L,SEEK_SET);
for ( i=0 ; i<2 && ! feof(f) ; i++ )
{ fread((void *)&d,1,sizeof(double),f);
vol [i] = d;
}
sav= vol [1] - vol [0];
fseek(f,837L,SEEK_SET);
for ( i=0 ; i<1000 && ! feof(f) ; i++ )
{ fread((void *)&d,1,sizeof(double),f);
cur [i] = d;
NOF = i;
}
step= sav/(NOF-1);
out_v [0] = vol [0];
for ( i=1 ; i
{
out_v [i] = out_v [i-1] + step;
printf ("%12g %50g\n", cur[i-1], out_v [i-1]);
}
printf ("%12g %50g\n", cur[NOF-1], out_v [NOF-1]);
fclose(f);
return(0);
}
A headerben kikerestem a min és a max feszültséget, ami
az első áramhoz és az utólsóhoz tartozik a köztes részt
pedig szétosztottam egyenletesen (így már tögéletesen
fisszakapom az IV görbét).
A kérdésem már csak az, hogy hogyan dudom azt megcsinálni,
hogy:
-látszik hogy a forrásban van a file neve, hogyan tudom azt meg csinálni
azt mint egy shel scriptben, hogy a $1 legyen a file név
azaz progi ?
- a másik, hogy egy text file be menyen a kimenet azt csak a pipe >>-al tudom
véghez vinni?
- A hozzászóláshoz be kell jelentkezni
látszik hogy a forrásban van a file neve, hogyan tudom azt meg csinálni
azt mint egy shel scriptben, hogy a $1 legyen a file név
imigyen deklaralod a main()-t:
int main(int argc,char *argv[])
{
...
}
ekkor az
argc
az argumentumok sza'ma (mint shell-ben a
$#
, csak 1-gyel tobb), es az
argv[x]
az x-ik argumentum: x=0: a progrma neve, x=1: elso argumentum (
$1
), ...
tehat:
if ( argc >= 2 ) f=fopen(argv[1],"rb");
else f=fopen("alapertelmezettfile.dat","rb");
if ( f==NULL )
{ fprintf(stderr,"error: unable to open input file.\n");
return(1);
}
az
else
a'gban lehet
f=stdin
is, ekkor a progi az standard input-rol olvassa a kakaot.
másik, hogy egy text file be menyen a kimenet azt csak a pipe >>-al tudom
véghez vinni?
FILE *fw;
fw=fopen("kimenet.dat","wb");
...
e's az osszes
printf(...);
-t lecsereled
fprintf(fw,...);
-ra.
amennyiben megis a kepernyore iratna'd ki, akkor
fw=stdout
a fenti
fopen()
helyett. Erdemes itt is
NULL
-ra csekkolni.
A.
- A hozzászóláshoz be kell jelentkezni
Sziasztok,én egy tök béna,műszaki analfagamma nő vagyok és segítséget kérnék valakitől. Tuti, hogy kiröhögtök, hogy ilyen piti a dolog,de hát egy újszülöttnek ez is új :)
Adott egy word dokumentum. Be szeretném linkelni ennek a doksinak a tartalmát egy fórumra,h onnan meg tudják nyitni. El tudná valaki ezt szájbarágós módszerrel nekem valahogy magyarázni? :))
- A hozzászóláshoz be kell jelentkezni
attól függ, hogy hova szeretnéd belinkelni.
általában fórumokon az [ url=http://ahol/a/doc/van.doc]kattints ide[/url] módszerrel lehet, és az elejére nem kell a space a szögleteszárójel után. (tehát: [url=])
- A hozzászóláshoz be kell jelentkezni
köszönöm,akkor most megpróbálom...
- A hozzászóláshoz be kell jelentkezni
a link maga létrejött,de rákattintva nem jött be a dokumentum.
[url=http://ahol/a/doc/van.doc]
a http:// után hogyan írom be a doksi helyét? az addig oké,hogy meghajtó+fileneve.doc, de a backspace hány helyen van? végig így / van a jel?
- A hozzászóláshoz be kell jelentkezni
Őőő... :)
Na. Nem hiszem hogy van saját szervered, úgyhogy jobb lenne előbb feltöltened valahová. Onnan meg úgy írod be, hogy http://ahova/feltöltötted/dokumentum.doc, például http://bogancs.uw.hu/iras.doc.
- A hozzászóláshoz be kell jelentkezni
Saját gépeden található doksit így nem tudsz megosztani másokkal. (pontosabban megtudsz, de akkor kell a gépen webszervernek futni, és a Nagyvilág felől elérhetőnek kell lennie, ez egy otthoni adsl/kábelnet/wireless esetén nem nagyon működik)
dszabo hozzászólásában írt megoldás javasolt...
Mik
- A hozzászóláshoz be kell jelentkezni
megoldás lehet (15 napra): send2u
ad egy linket feltöltés után, és azt kell beszúrni a fórumra
- A hozzászóláshoz be kell jelentkezni
Szöveg extract binárisból: strings
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget, kezdem kapizsgálni már a lényeget abból,ahogy leírtátok itt. Ez a 15 napos feltöltés nekem most tökéletes, úgyis csak ideiglenesen kell hogy lássák a doksit.
Szóval kösz mindenkinek! :)
- A hozzászóláshoz be kell jelentkezni