Madhu Reddy wrote:
>
> Hi,
Hello,
> I want to write following C Equivalant with PERL
> My perl equvalant is at the end of this mail..
> please correct me...
> my questios are inside perl comments...
>
> ----------
> C Code start
> -----
> for(i=0;i<(int)strlen(Buffer);i++)
> {
> if((Buffer[i] < 32) || (Buffer[i] > 126))
> {
> if((Buffer[i] == 10) || (Buffer[i] == 13))
> {
> Buffer[i] = '\0';
> }
> else
> {
> BadRec = 1;
> if(Buffer[0] != 26)
> {
> BadCnt++;
> fprintf(Reject,"%s\n",Buffer);
> }
> else
> Ignore++;
> }
> break;
> }
> }
> ----------------
> PERL CODE START
> ---------------
> for(split(//)){
> if ((ord() < 32) || (ord() < 126)) {
> if (ord() == 10) || (ord() == 13)) {
> #make this char as NULL
> # here how to make this char is NULL ?
> # $_ =~ tr/\r\n/\0\0/; is this Correct ?
> } else {
> $badrec = 1;
> # if ord() of first char is not 26
> # reject reocrd
>
> }
> }
> }
A literal translation of the C code would be:
for ( my $i = 0; $i < length( $Buffer ); $i++ ) {
if ( ord( substr( $Buffer, i, 1 ) ) < 32 or ord( substr( $Buffer, i, 1 ) ) > 126 )
{
if ( ord( substr( $Buffer, i, 1 ) ) == 10 or ord( substr( $Buffer, i, 1 ) ) ==
13 ) {
substr( $Buffer, i, 1 ) = "\0";
}
else {
$BadRec = 1;
if ( ord( substr( $Buffer, 0, 1 ) ) != 26 ) {
$BadCnt++;
print Reject "$Buffer\n";
}
else {
$Ignore++;
}
}
last;
}
}
Which would look like this in perl:
unless ( $buf =~ tr/\0-\x1F\x7F-\xFF// ) {
unless ( $buf =~ tr/\x0A\x0D/\0/ ) {
$BadRec = 1;
if ( $buf =~ /^\x1A/ ) {
$Ignore++;
}
else {
$BadCnt++;
print Reject "$buf\n";
}
}
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]