Just nu i M3-nätverket
Jump to content

RealBasic och snabbare filer


Johan12345678

Recommended Posts

Johan12345678

Hej!!

 

I FutureBasic finns ett sätt att skriva till filer som är mångfaldigt snabbare än den vanliga Print-metoden(write).

Finns det en motsvarighet till RealBasic? Var kan man hitta exempel på detta? Deras hemsida funkar ju inte...

Link to comment
Share on other sites

Henrik K Olofgörs

Vad är det du vill göra och med vad och när? Jag gissar att du avser skillnaden i åtkomst mellan binära vs. textbaserade filer (binär åtkomst = ej sekventiell = snabbare) men det är svårt att avgöra med en så allmänt formulerad fråga. Om du vill manipulera scratch-filer, undvika disk-"chatter" etc i en tung app med höga krav på dataintegritet så måste du antagligen göra det i c/c++ eller via en db-hanterare.

 

För info, gå till

http://www.realbasic.com/release.html

och ladda hem language guide och developers guide och se till att det är för den version du använder (demo eller registrerad).

Börja med att läsa developers guide från "pärm till pärm", skumma sedan language guide, och använd därefter den inbyggda hjälpen i programmet (shortcut= kommando-1).

Om du inte hittar vad du söker, leta i det sökbara listarkivet på

http://bumppo.net/search/realbasic.html

Du kan även botanisera bland någon av länksamlingarna, förslagsvis hos

http://www.radiks.net/~search/realnews/

(titta i grå fältet till vänster)

 

 

Link to comment
Share on other sites

Johan12345678

Hej!!

 

Tack för brevet. Desvärre är jag fortfarande nybörjare på RB. Mit önskemål är att kunna läsa och skriva till stora filer snabbare. Jag letar efter några exempel på detta. Jag lyckas inte komma in på RealBasic ftp av någon anledning (antagligen proxyn), någon som vet var jag kan hitta exempelfiler?

Link to comment
Share on other sites

Henrik K Olofgörs

Ok, hej Johan,

du vill använda binära filer. Om appen du skriver är tung, bered dig på att lära och svära en del (men det är *väl* investerad tid).

Säg att du har fil X som innehåller datasegment A till Z, varje segment innehåller block 1 till 100, och du vill läsa segment P block 27. (Allt detta under förutsättning att du inte kan hålla allt i RAM.)

Använder du en textfil så måste du läsa *hela* filen för att nå P27, använder du en binär fil kan du läsa *enbart* P27, förutsatt att du vet var exakt var det du ska läsa/skriva börjar (och slutar). Mycket snabbare med andra ord om det är stora filer.

 

Det trixiga är att du måste hålla reda på var någonstans i filen olika data finns, dvs ha en binär adress (ungefär som när man skapar memory blocks via c/c++). Om du sedan skriver till filen måste du också givetvis rekalkylera alla adresser som påverkas. (Säg exempelvis att du skriver 500 byte till P27, då måste du lägga till 500 till alla adresser efter P27.)

Ett sätt att undvika detta är om du absolut säkert vet att data inte överstiger en viss storlek. I så fall kan du använda fasta block. Låt varje block vara t ex 10k stort, och det utrymme som inte tas upp av data populerar du med nollor. När du sedan skriver data så tar du bort några av nollorna och skriver motsvarande antal data till blocket: adresserna påverkas inte. Smidigt, om du har gott om utrymme, men *katastrofalt* om det blir mer än 10k data någonstans, så du bör lägga in rejält med exeption handlers i så fall.

 

Om du inte kan nå RS ftp, testa

ftp://ftp.infoscouts.com/mirrors/realsoftware/english_intl/current_release/

I värsta fall kan jag maila dig filerna, hör av dig i så fall. Och om du menar allvar med RB, gå med i utvecklarlistan (länk hos RealSoftware).

Link to comment
Share on other sites

Johan12345678

Hej igen!!

 

Tack så mycket för tipsen, de var mycket bra. Dock har jag fått fram ett nytt problem. Enligt instruktionsboken ska denna koden fungera bra:

 

dim f as folderItem

dim i as integer

dim stream as binaryStream

 

f=getFolderItem("Fil")

if f<>nil then

stream=f.createbinaryFile("text")

stream.position =0

stream.writepString "jkl"

stream.close

end if

 

men jag får unhandlednilobjectionraised eller något liknande. Vad är fel???

 

Det här med att hålla reda på var information lagras. Hur gör man det? Tex

000101 12121

000202 16654

000327 53453

000102 75856

 

Hur gör jag om jag vill söka upp informationen med datumet tex 000202?

 

Mycket tacksam för svar!!

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...