Fast Indexing....?

 BBS: Inland Empire Archive
Date: 04-11-92 (17:14)             Number: 10
From: JEAN CREPEAU                 Refer#: NONE
  To: ASA ROSSOFF                   Recvd: NO  
Subj: Fast Indexing....?             Conf: (2) Quik_Bas
In a message to ALL, ASA ROSSOFF wrote:
AR=> I wrote a program to display quotes from a file.... But it's very slow
    the first  time it's  run, because  it creates  an index  file... I see
    programs written  in other  languages creating  similar index  files in
    seconds, while my program takes about 20 minutes.... (for a 360k  quote
    file)

AR=> The index file is about 14k for a 360k file...

AR=> Here's my code  to create the index  file... any ideas or  suggestions
    would be GREATLY appreciated...

AR=> COOKIE.TXT  is simply  a text  file, and  a blank  line designates the
    beginning of a new cookie...

        I  understand  why  it's  so  long.  You  read  your text file on a
character basis... Use  the following sub  instead. It recreates  your text
files by eliminating blank lines. This subroutine takes the input file, and
creates to new files (filename.DAT  and filename.REF). You should not  name
your input file with the .DAT or .REF extension.

DEFLNG A-Z
SUB MAKEINDEX(INFILE$)
I=INSTR(INFILE$,"."):IF I THEN F2$=LEFT$(INFILE$,I-1) ELSE F2$=INFILE$
F1$=F2$+".DAT"
F2$=F2$+".REF"
OPEN INFILE$ FOR INPUT ACCESS READ LOCK WRITE AS #1
OPEN F1$ FOR OUTPUT ACCESS WRITE LOCK READ WRITE AS #2
OPEN F2$ FOR BINARY ACCESS WRITE LOCK READ WRITE AS #3
U$=""
WHILE NOT EOF(1)
        IF LEN(U$)>8192 THEN
                PUT #3,,U$
                U$=""
        ENDIF
        LINE INPUT #1,X$
        IF LEN(X$) THEN
                U$=U$+MKL$(LOF(2)+1)
                PRINT #2,X$
        ENDIF
WEND
PUT #3,,U$
CLOSE
END SUB

        The file #3  is buffered with  u$, which is  an 8K buffer.  The sub
runs faster this way.
OPEN "FILENAME.DAT" FOR INPUT ACCESS READ LOCK WRITE AS #2
OPEN "FILENAME.REF" ACCESS READ LOCK WRITE AS #3 LEN=4
DIM idx AS LONG
ntot=LOF(3)/4           gives the number of quotes in your file
GET #3,n,idx            These 3 lines give you the nth quote in your file
SEEK #2,idx                     1 <= n <= ntot
LINE INPUT #2,x$                x$ = quote
---
 * Origin: INTERACESS Montreal (QC) Canada (514) 528-1415 (1:167/280)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET