Reading and Writing to the buffer
Reading and Writing to the buffer
Does any one know how to read and write from the buffer
I can't beleave that no one knows how to do this
Toper
Topers BBS
I can't beleave that no one knows how to do this
Toper
Topers BBS
Re: Reading and Writing to the buffer
What "buffer" are you talking about?bigjoe11a wrote:Does any one know how to read and write from the buffer
I can't beleave that no one knows how to do this
Toper
Topers BBS
Regards..... Moneo
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
Re: Reading and Writing to the buffer
ok, no one has ever ask me that before. Just like reading and writing to text files. reading and writing to the buffer. I only been doing this for a week an and 1/2.moneo wrote:What "buffer" are you talking about?bigjoe11a wrote:Does any one know how to read and write from the buffer
I can't beleave that no one knows how to do this
Toper
Topers BBS
Regards..... Moneo
I don't know how to answer that
Toper
From the Wikipedia:
Buffer (computer science), memory used to temporarily store output or input data.
"Writing" to a buffer:
When you read a file from your hard drive, from a floppy, etc. you first OPEN the file, and assign a buffer file number, as in the code line:
which reads:
Open the file MyTextr.txt that is on my hard drive (C:\), in folder, or directory Letters, for reading (FOR INPUT) into the computer's memory, and assign (AS) an area of memory that will be referred to as buffer file #3. The data in MyText.txt is now in the computer memory, in the space called, simply, "#3".
Next, you proceed to read from the buffer file #3, and write to a string variable, say, A$, and proceed to print it to the screen:
For more information, in QuickBASIC, go to Help, Index, enter O, and double click on OPEN. Also, CLOSE.
And, for even more information, please read any of the many QuickBASIC tutorials that are available.
Buffer (computer science), memory used to temporarily store output or input data.
"Writing" to a buffer:
When you read a file from your hard drive, from a floppy, etc. you first OPEN the file, and assign a buffer file number, as in the code line:
Code: Select all
OPEN "C:\Letters\MyText.txt" FOR INPUT AS #3
Open the file MyTextr.txt that is on my hard drive (C:\), in folder, or directory Letters, for reading (FOR INPUT) into the computer's memory, and assign (AS) an area of memory that will be referred to as buffer file #3. The data in MyText.txt is now in the computer memory, in the space called, simply, "#3".
Next, you proceed to read from the buffer file #3, and write to a string variable, say, A$, and proceed to print it to the screen:
Code: Select all
LINE INPUT #3, A$ 'read the first line of buffer file #3
PRINT #3, A$
And, for even more information, please read any of the many QuickBASIC tutorials that are available.
Ralph, with QuickBASIC 4.5, operating under Windows XP, wiht anHP LaserJet 4L Printer. Bilingual in English/Spanish
No, thats reading and writing to a text file.Ralph wrote:From the Wikipedia:
Buffer (computer science), memory used to temporarily store output or input data.
"Writing" to a buffer:
When you read a file from your hard drive, from a floppy, etc. you first OPEN the file, and assign a buffer file number, as in the code line:which reads:Code: Select all
OPEN "C:\Letters\MyText.txt" FOR INPUT AS #3
Open the file MyTextr.txt that is on my hard drive (C:\), in folder, or directory Letters, for reading (FOR INPUT) into the computer's memory, and assign (AS) an area of memory that will be referred to as buffer file #3. The data in MyText.txt is now in the computer memory, in the space called, simply, "#3".
Next, you proceed to read from the buffer file #3, and write to a string variable, say, A$, and proceed to print it to the screen:For more information, in QuickBASIC, go to Help, Index, enter O, and double click on OPEN. Also, CLOSE.Code: Select all
LINE INPUT #3, A$ 'read the first line of buffer file #3 PRINT #3, A$
And, for even more information, please read any of the many QuickBASIC tutorials that are available.
Copy some text file to a floppy on the A:\ drive, let's say, the file, "AnyFile.txt"
Now, enter this little program in QuickBASIC:
Run the program. You will see the A:\ drive turn on. As soon as the program stops, at the line,
WHILE INKEY$ ="":WEND
Open drive A:\ and take the floppy out. Obviously, the computer will not be able to read anything from that drive, as long as the floppy is not there.
Now, press the spacebar. The program continues to run READS THE FIRST LINE FROM THE BUFFER FILE #1, assigns it to the variable A$, and, in the next program line, prints it to the screen. The program continues on, goes up to the line,
WHILE INKEY$ = "":WEND
and stops, until you press the spacebar again.
Notice that the A:\ drive is not turning on, and that it cannot read anything, as it is open!!!
Hold the spacebar down, and the program continues to read line after line from the computer's memory, from buffer file #1, until it runs out of data, at which time the program ends.
So, the program first opened the file, AnyFile.txt on drive A:\ and wrote it into the computer memory's area assigned to the buffer file #1. Later, it reads the buffer file #1, one line at a time, assigns it to the variable, A$, then prints it to the screen.
I hope this clarifies the "writing to" and "reading from" a buffer!
Now, enter this little program in QuickBASIC:
Code: Select all
CLS
OPEN "A:\AnyFile.txt" FOR INPUT AS #1
WHILE NOT EOF(1)
WHILE INKEY$ = "":WEND
LINE INPUT #1, A$
PRINT A$
WEND
CLOSE #1
WHILE INKEY$ ="":WEND
Open drive A:\ and take the floppy out. Obviously, the computer will not be able to read anything from that drive, as long as the floppy is not there.
Now, press the spacebar. The program continues to run READS THE FIRST LINE FROM THE BUFFER FILE #1, assigns it to the variable A$, and, in the next program line, prints it to the screen. The program continues on, goes up to the line,
WHILE INKEY$ = "":WEND
and stops, until you press the spacebar again.
Notice that the A:\ drive is not turning on, and that it cannot read anything, as it is open!!!
Hold the spacebar down, and the program continues to read line after line from the computer's memory, from buffer file #1, until it runs out of data, at which time the program ends.
So, the program first opened the file, AnyFile.txt on drive A:\ and wrote it into the computer memory's area assigned to the buffer file #1. Later, it reads the buffer file #1, one line at a time, assigns it to the variable, A$, then prints it to the screen.
I hope this clarifies the "writing to" and "reading from" a buffer!
Ralph, with QuickBASIC 4.5, operating under Windows XP, wiht anHP LaserJet 4L Printer. Bilingual in English/Spanish
Ah, No
What your talking about is not the buffer. Your talking about is a file file. or Reading and writing to a text file.Ralph wrote:Copy some text file to a floppy on the A:\ drive, let's say, the file, "AnyFile.txt"
Now, enter this little program in QuickBASIC:Run the program. You will see the A:\ drive turn on. As soon as the program stops, at the line,Code: Select all
CLS OPEN "A:\AnyFile.txt" FOR INPUT AS #1 WHILE NOT EOF(1) WHILE INKEY$ = "":WEND LINE INPUT #1, A$ PRINT A$ WEND CLOSE #1
WHILE INKEY$ ="":WEND
Open drive A:\ and take the floppy out. Obviously, the computer will not be able to read anything from that drive, as long as the floppy is not there.
Now, press the spacebar. The program continues to run READS THE FIRST LINE FROM THE BUFFER FILE #1, assigns it to the variable A$, and, in the next program line, prints it to the screen. The program continues on, goes up to the line,
WHILE INKEY$ = "":WEND
and stops, until you press the spacebar again.
Notice that the A:\ drive is not turning on, and that it cannot read anything, as it is open!!!
Hold the spacebar down, and the program continues to read line after line from the computer's memory, from buffer file #1, until it runs out of data, at which time the program ends.
So, the program first opened the file, AnyFile.txt on drive A:\ and wrote it into the computer memory's area assigned to the buffer file #1. Later, it reads the buffer file #1, one line at a time, assigns it to the variable, A$, then prints it to the screen.
I hope this clarifies the "writing to" and "reading from" a buffer!
You know like copy and paste. You can write to a buffer, and then read from or then save it to a text file.
I don't know of any other way to define what I mean. Maybe theres no way to do to read or write to a buffer.
Thanks
well what it sounds like is you want to store something in
EMS or XMS memory and not an actual file...
here is one explaination of a "buffer" :
what would help is if you could tell us SPECIFICALLY what your trying
to do.....
here is an article on using EMS with quickbasic...
http://www.phatcode.net/articles.php?id=155
EMS or XMS memory and not an actual file...
here is one explaination of a "buffer" :
Code: Select all
Buffer:
When referring to memory a buffer is temporary storage in memory used to temporarily store information while other information is being processed.
The Buffer RAM is a vital part of the operation of the Hard Drive. This buffer is a temporary storage for data before it is written to or read from the unit.
The buffer RAM stores the most-accessed files so that the drive will not physically have to retrieve them. A well-designed Hard Drive buffer can speed up the overall performance of the unit. Until recently, buffer sizes where 512K or smaller, while many of the fastest drives currently available offer 2-8 MB of RAM.
Unfortunately, a larger buffer does not necessarily mean a faster drive. Although a large buffer can be very important in determining the speed
to do.....
here is an article on using EMS with quickbasic...
http://www.phatcode.net/articles.php?id=155
Temp storage
Ok, I want to write to the buffer before I write to the disk filesid6.7 wrote:well what it sounds like is you want to store something in
EMS or XMS memory and not an actual file...
here is one explaination of a "buffer" :
what would help is if you could tell us SPECIFICALLY what your tryingCode: Select all
Buffer: When referring to memory a buffer is temporary storage in memory used to temporarily store information while other information is being processed. The Buffer RAM is a vital part of the operation of the Hard Drive. This buffer is a temporary storage for data before it is written to or read from the unit. The buffer RAM stores the most-accessed files so that the drive will not physically have to retrieve them. A well-designed Hard Drive buffer can speed up the overall performance of the unit. Until recently, buffer sizes where 512K or smaller, while many of the fastest drives currently available offer 2-8 MB of RAM. Unfortunately, a larger buffer does not necessarily mean a faster drive. Although a large buffer can be very important in determining the speed
to do.....
here is an article on using EMS with quickbasic...
http://www.phatcode.net/articles.php?id=155
Lets say I have
Name
Location
Age
Before I write these to the disk file. The user mite want to change them,
or
Lets say I have the disk file with these lines
Jobs
Auto's
and so on
what happens when I want to delete the Auto's from the file. Instead of creating 2 disk files. I would copy the one I want to keep in the buffer and then delete the old disk disk and rewrite the contents of the buffer to the disk file
I hope that helps
-
- Veteran
- Posts: 399
- Joined: Wed Mar 02, 2005 9:01 pm
- Location: Nashville, Tennessee
- Contact:
You could load the list of strings into the memory buffer as variables in an array. Using A:\AnyFile.Txt again...
Then, each line will be loaded as a seperate element of Buffer$. You can freely edit these, and then write them to a file (the same file if you really want to).
Code: Select all
DIM Buffer$(500) 'Change to line numbers in file
OPEN "A:\AnyFile.txt" FOR INPUT ACCESS READ AS #1
DO
LINE INPUT #1, Buffer$(A%)
A% = A% + 1
LOOP UNTIL EOF(1)
No, thats not it
I thought there would be a way to read a write to the memory buffer. Maybe there isn't a way to do this is BasicPatz QuickBASIC Creations wrote:You could load the list of strings into the memory buffer as variables in an array. Using A:\AnyFile.Txt again...Then, each line will be loaded as a seperate element of Buffer$. You can freely edit these, and then write them to a file (the same file if you really want to).Code: Select all
DIM Buffer$(500) 'Change to line numbers in file OPEN "A:\AnyFile.txt" FOR INPUT ACCESS READ AS #1 DO LINE INPUT #1, Buffer$(A%) A% = A% + 1 LOOP UNTIL EOF(1)
What your doing is reading from a file. Thats fine. Thats what I wanted to avoid until I'm ready to write it to a file.
Thanks for your time
I'm just guessing here, but what you seem to want to "write" to a string as if it was a file, kind of like snprintf in C. You're right: QBASIC doesn't support this (directly), but you can implement a few SUBs and FUNCTIONS that will make it hard to tell the difference. Let's suppose you'd be happy with a read and write command, similar to the Linux system calls, except they work on strings instead of files.
Unfortunately, QBASIC is very picky about what we call our SUBs and FUNCTIONs, so we have to call our routines readbuf and writebuf. Like Linux's read and write, they operate on an integer "descriptor" that represents the buffer.
Furthermore, QBASIC doesn't allow structured types to contain variable-length strings or any kind of array.
QBASIC also doesn't have a way to lengthen an array without erasing the contents. But you can lengthen strings that aren't part of TYPEs with impunity (within the 32,767-character limit, of course).
What this is leading up to is a need to use global variables, which is generally considered a bad thing. If we were writing this in C++, we would declare no global variables. But, since we have no choice here in QB, we'll do it anyway:
This allows there to be many streams in memory that can be "read" or "written to". numStreams holds the number of currently-active streams.
The only fortunate thing is that we can put this code in its own module, and then only FUNCTIONs and SUBs from that module can access the variables. I'll bet Microsoft never realized that QuickBASIC supports object-oriented programming, complete with private data members! Having said that, QuickBASIC still sucks ass, and you should really consider migrating to a real programming language, like Python.
We'll need a function to allocate a new stream. Since our streams are allocated on a stack, we'll call our allocation function pushbuf%. It returns an integer descriptor that will be accepted by the other functions that make up the interface.
And here's a SUB that frees the most recently allocated stream:
Here's a couple of procedures that can be used to manipulate the current position in the buffer. tellbuf% tells you the current position in the buffer (like ANSI C's ftell), and seekbuf sets the position within the stream:
Finally, we can write our functions for "reading" and "writing" a buffer. WARNING: MID$ is 1-based, going against convention:
Save all the above to one module, STREAMS.BAS, and use File|Create File to create your main module. (Set the Main Module in Run|Set Main Module or your program will do nothing)
Here is a main main module that shows how to use the new interface:
________
Buy Vaporizer
Unfortunately, QBASIC is very picky about what we call our SUBs and FUNCTIONs, so we have to call our routines readbuf and writebuf. Like Linux's read and write, they operate on an integer "descriptor" that represents the buffer.
Furthermore, QBASIC doesn't allow structured types to contain variable-length strings or any kind of array.
QBASIC also doesn't have a way to lengthen an array without erasing the contents. But you can lengthen strings that aren't part of TYPEs with impunity (within the 32,767-character limit, of course).
What this is leading up to is a need to use global variables, which is generally considered a bad thing. If we were writing this in C++, we would declare no global variables. But, since we have no choice here in QB, we'll do it anyway:
Code: Select all
CONST maxStreams = 100
DIM SHARED streams(maxStreams) AS STRING
DIM SHARED positions(maxStreams) AS INTEGER
DIM SHARED numStreams AS INTEGER
The only fortunate thing is that we can put this code in its own module, and then only FUNCTIONs and SUBs from that module can access the variables. I'll bet Microsoft never realized that QuickBASIC supports object-oriented programming, complete with private data members! Having said that, QuickBASIC still sucks ass, and you should really consider migrating to a real programming language, like Python.
We'll need a function to allocate a new stream. Since our streams are allocated on a stack, we'll call our allocation function pushbuf%. It returns an integer descriptor that will be accepted by the other functions that make up the interface.
Code: Select all
FUNCTION pushbuf%
pushbuf% = numStreams
numStreams = numStreams + 1
END FUNCTION
Code: Select all
SUB popbuf
' Reset the stream and deallocate memory.
positions(numStreams-1) = 0
streams(numStreams-1) = ""
numStreams = numStreams - 1
END SUB
Code: Select all
FUNCTION tellbuf%(desc AS INTEGER)
tellbuf = positions(desc)
END FUNCTION
SUB seekbuf(desc AS INTEGER, position AS INTEGER)
IF position > LEN(streams) THEN
position = LEN(streams)
END IF
positions(desc) = position
END SUB
Code: Select all
FUNCTION readbuf% (desc AS INTEGER, outbuf AS STRING, count AS INTEGER)
outbuf=""
IF desc >= numStreams THEN
' Bad file name or number
ERROR 52
END IF
IF positions(desc) > LEN(streams(desc)) THEN
' Input past end of file
ERROR 62
END IF
outbuf = MID$(streams(desc), positions(desc)+1, count)
positions(desc) = positions(desc) + LEN(outbuf)
readbuf% = LEN(outbuf)
END FUNCTION
SUB writebuf(desc AS INTEGER, inbuf AS STRING)
IF desc >= numStreams THEN
' Bad file name or number
ERROR 52
END IF
streams(desc) = streams(desc) + inbuf
positions(desc) = positions(desc) + LEN(inbuf)
END FUNCTION
Here is a main main module that shows how to use the new interface:
Code: Select all
' These declarations are absolutely necessary.
DECLARE FUNCTION pushbuf% ()
DECLARE FUNCTION tellbuf% (desc AS INTEGER)
DECLARE FUNCTION readbuf% (desc AS INTEGER, outbuf AS STRING, count AS INTEGER)
DECLARE SUB writebuf (desc AS INTEGER, inbuf AS STRING)
DECLARE SUB seekbuf (desc AS INTEGER, position AS INTEGER)
DECLARE SUB popbuf ()
' Our variables.
DIM fd AS INTEGER
DIM hello AS STRING
DIM status AS INTEGER
CLS
' Work with a new buffer.
fd = pushbuf%
' Store the string "Hello, world!" in the buffer
writebuf fd, "Hello, world!"
' Seek the beginning of the buffer.
seekbuf fd, 0
' Retrieve the first 5 bytes stored in the buffer.
status = readbuf%(fd, hello, 5)
' Print the retrieved bytes
PRINT hello
' Retrieve five more bytes from the buffer.
status = readbuf%(fd, hello, 5)
PRINT hello ' Different this time.
Buy Vaporizer
Last edited by historian on Thu Feb 10, 2011 9:29 pm, edited 1 time in total.
That seem too much
Thats a lot of code just to read and write to a buffer. Thanks
Re: That seem too much
thats old qbasic for you....it generally takes a bit more codingbigjoe11a wrote:Thats a lot of code just to read and write to a buffer. Thanks
to do the same thing as some of the higher level languages.
its probably just as easy to not try the buffer storage thing
with qbasic and just handle things with files.
Thanks
Yes, I guess so. Maybe I'll just stick with text files
Why couldn't one use something like this:
Code: Select all
CLS
DIM buf1 AS STRING
buf1 = "Hello, world"
PRINT buf1
PRINT MID$(buf1, 1, 5)
PRINT SPC(5); MID$(buf1, 5 + 1, 4)
PRINT SPC(5 + 4); MID$(buf1, 5 + 4 + 1, LEN(buf1) - 5 - 4)
Ralph, with QuickBASIC 4.5, operating under Windows XP, wiht anHP LaserJet 4L Printer. Bilingual in English/Spanish