Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Reading from a text file: problems in removing the terminating character

Posted on 2003-11-12
7
Medium Priority
?
276 Views
Last Modified: 2013-12-25
Hi Experts,

I am having some problem in removing the newline character from the string that is read from a text file.  I have the source code below.  The problem is if I have the username password pair as myname:password it says that the password has 9 characters.  The chomp seems to not remove the newline character.  Please provide me with some advice as to solve the problem.  This problem preventing me from going further with my assignment.

Thanks a lot,

-Thanesh
#!/usr/bin/perl --

use CGI qw( :standard );  

$dtd =

$theUsername = param( "username" );

$thePassword = param( "password" );

open(INFILE, "<password.txt") or die("The database could not be opened.");
$count = 0;
$userVerified = 0;
$passwordVerified = 0;

chomp $thePassword;
while (( $line =<INFILE> ) && (!$userVerified )) {
   
    $count = $count + 1;
    chomp( $line );
    ( $username, $password ) = split( /:/, $line );


   chomp($password);
   chomp($username);

    print( header() );
    print("<br>");
     if ( $theUsername eq $username ) {
           print("User name matches");
             print("<br>");
         $userVerified=1;  
             $len = (length($password));
             print("Length of password is: $len");
              print("<br>");

             $theLen = (length($thePassword));
             print("Lenth of input password is: $theLen");
              print("<br>");

         if ( $thePassword eq $password ) {
                print("Password matches");
                  print("<br>");
                $passwordVerified = 1;
            last;
         }
             print("The password don't match");
     }
}
close(INFILE);


print( header() );

#print( start_html( { dtd => $dtd,title => "First Perl Script" } ) );
print("thePassword: $thePassword");
print("The user name is: $theUsername\n\n");
print("<br>");
print("The user name is verified: $userVerified\n");
print("<br>");
print("The password is verified: $passwordVerified\n");

print("<br>");

print("The password is: $password");
print("<br>");
print("The user name processed: $username");
print("<br>");
print("The count is: $count");
#print( end_html() );




      
0
Comment
Question by:thanesh
7 Comments
 
LVL 1

Author Comment

by:thanesh
ID: 9736839
Hi,
As I investigate it further I found that the chomp does take out the newline character, but there seems to be TWO newline characters.  So, the problem is how to get rid of the second one?
0
 
LVL 1

Author Comment

by:thanesh
ID: 9736881
May be the second one is not a newline character but some other trailing character( non-visible)???
0
 
LVL 2

Accepted Solution

by:
rootkiddy earned 100 total points
ID: 9742239
Brief description of chomp: chomp basically removes what is in $/.  if $/ is empty then it removes all newlines from the string.

Since you are reading the file one line at a time then there shouldn't be a problem with mutliple newlines.  Your last post is probably accurate.  It may be something like a space, tab, or any other variable.  If this is a problem for you then you may consider doing something like

$password =~ s/^([\d\w]+).*/$1/;

Basically take what are valid characters and remember then and ignore everything else.  Note that if you have control over what goes into your file then you may want to make sure information is put in correctly.  Let me know if this helps or you have problems with this.
0
 
LVL 85

Assisted Solution

by:ozo
ozo earned 100 total points
ID: 9757277
\d is included in \w
If  password.txt was created under DOS it may use \r\n to end a line
0
 
LVL 1

Expert Comment

by:robysath
ID: 9761602
I agree with ozo, dos/windows puts a CR/LF (Carriage Return + Line Feed) as a new line.

Unix-like systems look only for LF and I think MACs look for the CR.

That's also why text files will have a larger size on a windows machine, yet smaller on a unix-like system if you transfer them to and fro in ascii mode.
0

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

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

Batch, VBS, and scripts in general are incredibly useful for repetitive tasks.  Some tasks can take a while to complete and it can be annoying to check back only to discover that your script finished 5 minutes ago.  Some scripts may complete nearly …
The Windows functions GetTickCount and timeGetTime retrieve the number of milliseconds since the system was started. However, the value is stored in a DWORD, which means that it wraps around to zero every 49.7 days. This article shows how to solve t…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
Suggested Courses

886 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