Amit Saxena wrote:
Hi Aruna

The solution


    my $invexcl = "\x{00A1}";
       my $atsign = "\x{0040}";
    $mailreci =~ s/(\w+)$invexcl(\w+)/$1$atsign$2/g;

works fine.

However that assumes that you know the control character to be substituted.

If the file contains lots of control characters and if the requirement is to remove all of them or to substitute all of them with some ascii character etc, my solution is preferred.

By the way, how do you find the octal / hexadecimal code of control character that appears in the file.

I use UNIX "ob -bc" command for the same but even that is also cumbersome if there are many lines
and many control charcters.

Regards,
Amit Saxena


On Mon, Jun 30, 2008 at 7:05 PM, Aruna Goke <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Amit Saxena wrote:

        Try

        $email =~ s/[[:cntrl:]]/@/g;

        instead of

        $email =~ s/!/@/g;

        Infact try this in the entire file.

        Note :- This is on the assumption that there are no other
        control characters in the input file.

        On Fri, Jun 27, 2008 at 2:51 AM, Aruna Goke <[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]> <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>> wrote:

           David Romero wrote:

               use a regular expression

               my $email = 'user!dominio.com <http://dominio.com>
        <http://dominio.com>';
               $email =~ s/!/@/g;
               ###Result [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
        <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>


               http://www.troubleshooters.com/codecorn/littperl/perlreg.htm


               On Thu, Jun 26, 2008 at 1:35 PM, Aruna Goke
        <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
               <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> wrote:

                   hi,

                   i have the this log from my sms gateway, however, the
                   inverted exclamation
                   mark was sent from the smsc as @.

                   2008-06-26 17:22:35 SMS request sender:+2342019122
        request:
                   'maruna¡ontng.com <http://ontng.com>
        <http://ontng.com>,test,Love my test

                   message' file answer: ''
                   2008-06-26 17:27:17 Receive SMS [SMSC:caxt] [SVC:] [ACT:]
                   [BINF:]
                   [from:+2342019122] [to:+2349191] [flags:-1:0:-1:0:-1]
                   [msg:43:maruna!ontng.com <http://ontng.com>
        <http://ontng.com>,test,Love my

                   test message] [udh:0:]
                   2008-06-26 17:27:17 SMS request sender:+23422019122
        request:
                   'maruna!ontng.com <http://ontng.com>
        <http://ontng.com>,test,'Love my test

                   message'file answer: ''
                   2008-06-26 17:34:15 Receive SMS [SMSC:caxt] [SVC:] [ACT:]
                   [BINF:]
                   [from:+2342019122] [to:+2349191] [flags:-1:0:-1:0:-1]
                   [msg:43:maruna¡ontng.com <http://ontng.com>
        <http://ontng.com>,test,Love my

                   test message] [udh:0:]

                   I have my script that parse the file and extract as below

                   To: maruna¡ontng.com <http://ontng.com>
        <http://ontng.com> Subject: test

                   Message: Love my test message  sender :
                   [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
        <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>



                   What i want to achieve is to translate the to address
        back to
                   [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
        <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> instaed of
                   maruna¡ontng.com <http://ontng.com> <http://ontng.com>.


                   when i checked through, i discover that it is inverted
                   exclamation mark with
                   character code 00A1 from unicode(hex) of latin-1
        subset. I
                   need this
                   translated to @, any help will be appreciated


                   my script is as below

                   #!/usr/bin/perl

                   use strict;
                   use warnings;
                   use File::Tail;
                   use Mail::Sender;


                   # the access.log is read and the following, recepient is
                   extracted.

                   my $name = "/var/log/bulksms/sms_access.log";
                   my ($mailreci, $mailsubj, @sms, $mailmsg, $mailsend,
                   $sendee, $sender, $msg,
                   $domain);
                   $domain = 'ontng.com <http://ontng.com>
        <http://ontng.com>';

                   open my $file, '<', $name or die "could not open
        $name: $!";
                   $file=File::Tail->new(name=>$name, maxinterval=>3,
                   adjustafter=>5);
                   while (defined($_=$file->read))
                                 {
                         @sms = split/\[/;
                         next unless $sms[6]=~/to:\+2349191\]/;
                         $sendee = $sms[5];
                         $sendee =~ s/from:\+(\d+)\]/$1/;
                         $sendee = "[EMAIL PROTECTED]";
                         $msg = $sms[8];
                         $msg = (split/:/, $msg)[-1];
                         $msg =~ s/(\w+)\s?\]/$1/;
                   #       i need only sender and $msg
                         ($mailreci, $mailsubj, $mailmsg) = (split/,/, $msg,
                   3)[0..2];

                         print  "To: $mailreci Subject: $mailsubj Message:
                   $mailmsg sender :
                   $sendee\n";

                      }




                   --
                   To unsubscribe, e-mail:
        [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>
                   <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>

                   For additional commands, e-mail:
        [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
                   <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>

                   http://learn.perl.org/







           its not an exclamation mark but inverted exclammation mark.




           --    To unsubscribe, e-mail: [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>
           <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>

           For additional commands, e-mail: [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>
           <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
           http://learn.perl.org/




        my $invexcl = "\x{00A1}";
           my $atsign = "\x{0040}";
        $mailreci =~ s/(\w+)$invexcl(\w+)/$1$atsign$2/g;

    I have used that above code to do the conversion and it seems to
    work now.

    Goksie



your solution does not work because the character in question is an inverted exclamation mark not exclamation mark itself.

Thanks

Goksie


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to