Solved

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

Posted on 2003-11-12
7
264 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 25 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 84

Assisted Solution

by:ozo
ozo earned 25 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

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Ever wondered how to display how many visitors you have online. In this tutorial I will show you an easy but effective way to display the number of online visitors in WhizBase. In this article I assume you have read my previous articles and know …
In this tutorial I will show you how to make a simple HTML bar chart with the usage of WhizBase, If you want more information about WhizBase please read my previous articles at http://www.experts-exchange.com/ARTH_5123186.html (http://www.experts-ex…
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

707 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now