Solved

Open file as: 10101001101....?

Posted on 2001-07-01
11
238 Views
Last Modified: 2010-04-06
Hi.
How can i open a file as integer:101011010100011110001010111 ???

How can i put the file together again, and save it??

It should be able to be displayed as a string (inttostr).

Thanks.
Dennis
0
Comment
Question by:Dennis9
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
  • +1
11 Comments
 
LVL 2

Expert Comment

by:bugroger
ID: 6242716
Hi,

"open a file as integer: 101010101010101010?"
 do you mean as bits?

0
 
LVL 1

Author Comment

by:Dennis9
ID: 6242760
Yes, but can they  be converted to integer or string?

Dennis
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 6242782
just from head, not tested

var
  f : file of integer;
  i : Integer;
begin
  assignfile(f,AFilename);
  rewrite(f);
  for i := 0 to 50 do
    write(f,I);
  closefile(f);
  reset(f);
  seek(f,25); //read the 26th Integervalue
  read(f,i);
  showmessage(IntToStr(i);
  closefile(f);
end;

meikl ;-)
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Expert Comment

by:bugroger
ID: 6242805
Hi,
 here are 3 functions to convert a byte, word and dword
 to a string of BITS and 1 function to convert a string
 of BITS to INTEGER.
 I don't know if it that what you want.

Function ByteToBit(b : byte) : String;
Var
 z : byte;
Begin
 Result := '';
 For z := 1 to 8 do
 Begin
  IF b AND 128 = 128 then Result := Result + '1'
                     else Result := Result + '0';
  b := b SHL 1;
 End;
End;

Function WordToBit(w : word) : string;
Var
 z : byte;
Begin
 Result := '';
 For z := 1 to 16 do
 Begin
  IF w AND 32768 = 32768 then Result := Result + '1'
                         else Result := Result + '0';
  w := w SHL 1;
 End;
End;

Function DWordToBit(d : dword) : string;
Var
 z : byte;
Begin
 Result := '';
 For z := 1 to 32 do
 Begin
  IF d AND $80000000 = $80000000 then Result := Result + '1'
                                 else Result := Result + '0';
  d := d SHL 1;
 End;
End;

Function BitsToInt(s : string) : Integer;
Var
 z : byte;
Begin
 Result := 0;
 For z := 1 to Length(s) do
 Begin
  IF s[z] = '1' then Result := Result +1;
  IF z <> Length(s) then Result  :=  Result  SHL 1;
 End;
End;
0
 
LVL 1

Author Comment

by:Dennis9
ID: 6243139
Hi.
I just need a way to open a file, and have it as an integer or string, and then i should be able to save the string/integer back to file. (copy of it)

Dennis
0
 
LVL 2

Expert Comment

by:bugroger
ID: 6243152
like a hex editor?
0
 
LVL 1

Expert Comment

by:edsteele
ID: 6245123
Why don't you use TFileStream.  You can open the file as a stream, then you can read bytes from it into a buffer and do anything you want with the buffer.

Does this help?
Eric
0
 
LVL 1

Author Comment

by:Dennis9
ID: 6245143
I will like it as text, but if u can tell me more about the buffer stuff it would be great!

Dennis
0
 
LVL 1

Expert Comment

by:edsteele
ID: 6245391
Well, a lot of using a stream is knowing what the data you are reading in will look like.  Do you have a good idea of what you are reading in?

Here are some examples.

Reading an integer:

After defining MyIntBuffer as an Integer, you can execute the following code to read an integer from the stream.

MyFileStream.Read(MyIntBuffer, SizeOf(MyIntBuffer));

Reading a string:

After defining MyCharBuffer as an Array of Char, you can execute the following code to read a string from the stream.  The catch is that you need to know how much to read from the stream.

MyFileStream.Read(MyCharBuffer, NumCharsToRead);

Maybe this will work for you and maybe it's too much work.  You have to decide that.  :)

Eric
0
 
LVL 1

Author Comment

by:Dennis9
ID: 6245627
Hi.
I need to read all from the stream, is there a way to do that?

Dennis
0
 
LVL 1

Accepted Solution

by:
edsteele earned 20 total points
ID: 6245666
Do you know the size of the file you will be loading?  If it's not big, just create an Array of Char of the size you need and read the whole file in at once.  The Read method of the TFileStream class returns the actual number of bytes read, so you can tell how much data was actually loaded.  If the size of the file is unknown or it will be large (you can define "large"), you can process the file a chunk at a time:

var
  MyCharBuffer: Array[0..1023] of Char;

while MyFileStream.Read(MyCharBuffer, 1024) do
begin
  Process(MyCharBuffer);
end;

This piece of code will read in 1KB chunks and pass the buffer to the Process procedure (which you will need to write).  The Process procedure could be as simple as converting the array to a string and storing it.

If I had a better idea of what you are trying to accomplish, my examples could be more directed.

Eric
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question