Ian Leigh wrote:


I wish to retrieve details about a particular file which are held in a text file, fairly large at about 264000 lines. The file contains details about many files but I only need to retrieve one file at a time. I am wondering about the best way to deal with this. The text file is set out in such a way that the filename is found first (with a specific character) and the information about follows. It is always in the same format but obviously some have more text than others (is this making sense) so there aren't specific field lengths etc..

So I take it your file looks something like
+ <filename1>
info about filename1
which can be guaranteed to not contain any plus signs
because that's the "specific character" you mention
+ <filename2>
with not much info
+ <filename3> etc.

And each time the program is run, you get a filename (from the user) and on;y want the info on that one file.
Is that close enough to an accurate description ?

I could try and bring that file in and use arrays I suppose but I don't know what effect that would have on performance and filesize.

You might need, or want, arrays in other languages, but don't need them in Rev for this kind of thing.

I don't know anything about using databases with rev but I wonder if using them would be a more elegant solution.

Don't see anything there that needs a database.

I don't want to have to import the text file every time the program is run and the text file itself is subject to occasional updating. This led me to think that just search through the text file itself might make it a bit more robust but I could do with some advice about which way to go.

You'll want to read the file each time (to deal with the updating issue). But it will be really, really quick.

I don't think 240K lines (say < 10M) should be a problem reading into a variable in Rev, so I'd recommend (at least as a first try), something like

Here's a little script I tried out

on mouseUp
  local tInfo, tFile, tCatalog
  answer file "Specify a catalog file"
  put it into tCatalog
  put fld "Input" into tFile
  put getFileInfo(tCatalog, tFile) into tInfo
  put tInfo into fld "Field"
end mouseUp

function getFileInfo pCatalog, pFile
  local tAlldata, tStart, tEnd
  put URL ("file:" & pCatalog) into tAllData
put lineoffset("+ " & pFile, tAllData) into tStart
  if tStart = 0 then
    -- file not found
    return "file " & pFile & " not found"
  end if
  put lineOffset("+", tAllData, tStart) into tEnd
  if tEnd = 0 then
    put -1 into tEnd
  else
    put tStart + tEnd -1 into tEnd
  end if
  return line tSTart to tEnd of tAllData
end getFileInfo

and it retrieves the info in < 1 second on a 242439 line file (finding a file about 100 lines from the end).

Hope that gives you some ideas ...

--
Alex Tweedly       http://www.tweedly.net



--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.11.14/127 - Release Date: 10/10/2005

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to