2016-10-21 1 views
-1

Ich schreibe ein Programm, das stark abhängig von der Perl-Index-Funktion ist, um Strings zu nehmen. Mein Ziel ist es, diese Zeichenfolge in eine Reihe von Teilzeichenfolgen zu zerlegen, die keine Leerzeichen enthalten.perl Index überspringt Suchwert

Das Problem, das ich habe, ist, dass in der zweiten Hälfte der Schleife die Indexfunktion beginnt, Leerzeichen zu überspringen.

Ich bin mit dem Testdaten:

1 12 2 5 PQ

Ich erwarte zu erhalten:

1, 12, a, 2, 5 , P, Q,

Stattdessen erhalte ich:

1, 12, a, 2 5, P Q,

Mein Code folgt:

use 5.010; 
use strict; 
use warnings; 

my $ivalue = <stdin>; 
chomp($ivalue); 
$ivalue = $ivalue . " "; 
my $current; 
my $space = 0; 
my $safespace = 0; 
my $lastspace = 0; 
my $closestspace = 0; 
my $i = 0; 
# Test data - 1 12 a 2 5 P Q 
while ($space != -1){ 
    $space = index($ivalue, " ", $space + $i++); 
    $closestspace = $space - $lastspace;      
    #print $lastspace . " " . $space . " = " . $closestspace . "; "; 
    $current = substr($ivalue, $lastspace, $closestspace); 
    #say "substring = " . $current; 
    $lastspace = $space + 1; 
} 

Dank der Zeit voraus! Wenn jemand Vorschläge hat, wie ich die Art und Weise, wie ich meine Frage gestellt habe, oder meinen Code im Allgemeinen verbessern kann, werden diese ebenfalls geschätzt.

+0

Alle sind Ihre Druck der Kommentar gesetzt, so dass wir nicht Ausganges. Was ist deine endgültige Ausgabe? – toolic

+0

Wenn Sie einfach ein Leerzeichen durch ein Komma und Leerzeichen ersetzen: '$ iivalue = ~ s//,/g;' – toolic

+1

Was auch immer Sie versuchen zu tun, 'index' und' substr' sind fast sicher falsch Werkzeuge für den Job. –

Antwort

0

Das Problem in dieser Linie ist:

$space = index($ivalue, " ", $space + $i++);

statt $i verwenden, machen, dass $space + 1