in reply to index() problem

Post a small chunk of code (where $line is set) that demonstrates the problem. index should not be partial-matching.

The PerlMonk tr/// Advocate

Replies are listed 'Best First'.
Re: Re: index() problem
by Anonymous Monk on Feb 05, 2004 at 23:52 UTC
    OK, the aim of the code is to go through the first file (news.txt) and where it finds 'The Lecht' then match it to 'The Lecht' in the second file (resort_list_for_parser.txt).
    Once matched it should then add in a appropriate anchor tag.

    It seems to be grabing the data from the string 'Lech' instead.
    Here's the code as requested:

    The file's is opened and $line is set here:

    open(NEWS,"news.txt") || die "Cannot open file"; my @news_lines = <NEWS>; close (NEWS); open(RESORT_LIST,"resort_list_for_parser.txt") || die "Cannot open fil +e"; my @resort_list_lines = <RESORT_LIST>; close (RESORT_LIST); foreach $line (@news_lines) { $line =~ s/\n\r//sgi; $line =~ s/\r//sgi; $line =~ s/\n//sgi;
    Within the foreach above the follwing code exists:
    foreach $resort_line (@resort_list_lines) { my ($resort_lookup,$resort,$country) = split (/:/,$resort_ +line,3); $resort =~ s/\r//sgi; $resort =~ s/\n//sgi; $resort_string_position = index($line,$resort_lookup); if ($resort_string_position != -1) { my $resort_lookup_length = length($resort_lookup); substr($line, $resort_string_position, $resort_lookup_l +ength) = "<html formatting>$resort_lookup</html formatting>"; } } }

    Edit by tye: Replace BR with CODE tags

      If index was the problem, you should have been able to demonstrate it in two or three lines of code. We don't know what your data file(s) contain(s) (and I for one don't care to know), but you should be able to debug this program by throwing in some debug print statements to display some of those variables before you do the index, like $line and $resort_lookup.
      A general note: Your uses of s/// are overkill. The s and i options are useless on \r and \n, and you could do the same thing with one tr/[\r\n]//d

      We monks still can't see what the values are in the variables in question. What I meant for you to provide was an example that we could run to observe the problem. Explicitly set the value of $line to whatever it is when you see the problem, include the relevant lines of code, and show the output, along with what you expected instead.


      The PerlMonk tr/// Advocate