?
Solved

Pascal to C#

Posted on 2006-10-19
2
Medium Priority
?
223 Views
Last Modified: 2010-04-05
Need a conversion to C# again.. optimized function of last request.

Ciuly around? :-)

var
 i, p: integer;
 b, d: byte;
 s1, s2: string;
const
 mark = chr($4f);

begin
 s2 := strloadfromfile('File.bin');// get data
 s2 := Copy(s2,$1d0, Length(s2)); //skip first 1d0 bytes
 i := 0; // init loop variable
 while i<64 do begin //until all array is filled
  p := pos(mark,s2);// get position of mark
  if p>0 then begin // marker word found, get id
   b := ord(s2[p-1]); // array item
   // ord - return numerical value of char
   if (ord(s2[p-4])=$2c)and(ord(s2[p-3])=$10) then dec(b,3); // check if need to dec item
   a[b] := i; // save item
   inc(i); // shift array index
   s2 := Copy(s2, pos(mark,s2)+length(mark), Length(s2));// copy rest of data
  end else i := 64;//end of parsing
 end;

'a' again is a byte array.
0
Comment
Question by:valvet
2 Comments
 
LVL 28

Accepted Solution

by:
2266180 earned 2000 total points
ID: 17768469
I presume strloadfromfile is one of the functions converted already.

            public byte[] optimized()
            {
                  string s2 = strLoadFromFile("test.bin");
                  s2 = s2.Substring(0x1d0);
                  int p;
                  byte i = 0;
                  int b;
                  byte[] a = new byte[64];
                  while (i<64)
                  {
                        p = s2.IndexOf(mark);
                        if (p>-1)
                        {
                              b = (byte)s2[p-1];
                              if (s2[p-4] == 0x2c && s2[p-3] == 0x10)
                                    b = b - 3;
                              a[b] = i;
                              i++;
                              s2 = s2.Substring(p+1);// 1=length(mark). it's always 1 since it's a char
                        }
                        else
                        {
                              i = 64;
                        }
                  }
                  return a;
            }

btw, the delphi version is not that optimized. copy function will always reallocate the string buffer. so it's better to use posex from strutils unit and work with an index into s2. in C# that would translate to s2.indexOf(mark,the_index);
also note that 1=length(mark). it's always 1 since it's a char. of course if you intend to use a string as a mark, then ignore my optimization and replace that with mark.Length and declare mark as string rather than char.
0
 

Author Comment

by:valvet
ID: 17768572
Excellent as usual :-).

Cheers!
0

Featured Post

Technology Partners: 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!

Question has a verified solution.

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

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
This is an update to some code that someone else posted on Experts Exchange. It is an alternate approach, I think a little easier to use, & makes sure that things like the Task Bar will update.
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Kernel Data Recovery is a renowned Data Recovery solution provider which offers wide range of softwares for both enterprise and home users with its cost-effective solutions. Let's have a quick overview of the journey and data recovery tools range he…
Suggested Courses
Course of the Month8 days, 11 hours left to enroll

621 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