Solved

# Pascal to C#

Posted on 2006-10-19
Medium Priority
216 Views
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 := 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
Question by:valvet
[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

LVL 28

Accepted Solution

2266180 earned 2000 total points
ID: 17768469

public byte[] optimized()
{
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

ID: 17768572
Excellent as usual :-).

Cheers!
0

## Featured Post

Question has a verified solution.

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

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
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…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
###### Suggested Courses
Course of the Month8 days, 15 hours left to enroll