Čtení bin souboru   zodpovězená otázka

VB.NET, Algoritmy, I/O operace

Prosím neporadil by někdo jak správně číst data z binárního souboru.

Jedná se sloupce hodnot. Jeden řádek má 24bytů.

2 jsou datum

2 jsou čas

4 číslo (desetiné)

4 číslo (desetiné)

4 číslo (desetiné)

4 číslo (desetiné)

2 číslo (celé)

2 číslo (celé)

Nikde jsem bohužel nenašel nějaký ucelený návod jak na to.

Předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Podívejte se na třídu BinaryReader http://msdn.microsoft.com/en-us/library/... - měla by umět přesně to, co potřebujete. Používá se jednoduše - vytvoříte si FileStream pro ten binární soubor a ten pak dáte konstruktoru toho BinaryReaderu. Viz příklady na MSDN

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, ale nejspíš to v mém případě takto jednoduše nepůjde. Funkce BinaryReader.Read pracuje s běžnýmy dat.typy a pro desetiné číslo je potřeba (ve VB), pokud se nepletu, min. 8bytů.

I když např. C# má dat.typ float a ten je 4bajtový.

Protože se může jednat o poměrně dost velké soubory, je velikost zápisu nejpíš co nejvíce minimalizována.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Datové typy v C# a VB.NET jsou naprosto stejné (a nejspíš se i stejně jmenují). Pro čtení 8B desetinných čísel (a.k.a. doublů) je tam fce ReadDouble http://msdn.microsoft.com/en-us/library/..., podobné funkce jsou tam i pro jiné datové typy jako je float, int ..... Metoda Read vám sice přečte neformátovaný kus dat (aspoň tak jsem to pochopil), nicméně ještě tam jsou metody ReadDouble,ReadInt, ReadJinyTyp, ktera prave vraceji pozadovany typ

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže již mi to funguje.

Dim fs As FileStream = New FileStream(jmSouboru, FileMode.Open)
Dim br As BinaryReader = New BinaryReader(fs)

datum(i) = br.ReadUInt16()
cas(i) = br.ReadUInt16()
open(i) = br.ReadSingle()
high(i) = br.ReadSingle()
low(i) = br.ReadSingle()
close(i) = br.ReadSingle()

Problém byl v tom, že jsem začínal o jen bajt níže. Soubor totiž nejdříve začíná zahlavím a to je třeba přeskočit, proto mi ty hodnoty nevycházely.

Každopádně děkuji za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve VB.NET se datový typ float jmenuje Single a má 4 bajty, pak je ještě datový typ double, který se jmenuje stejně jak v C#, tak i ve VB.NET.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback