Wortliste erstellen

mc_gulasch

Erfahrenes Mitglied
Tach ihr,

ich muss eine Txt-File durchgehen und jedes darin vorkommende Wort auflisten, natürlich kann es sein, dass ein Wort öfter vorkommt als das andere, aber ich will, dass jedes Wort nur genau EINMAL vorkommt. Also hab ich mir folgendes überlegt (abgesehen davon, dass noch einige Formatierungen gemacht werden müssen):
Perl:
$input = "./text.txt";
$output = "./wortliste.txt";
open(OUT,">$output");
open(IN,$input);
while(<IN>)
{
 #Formatierungen so dass alle Wörter einer Zeile in @word gespeichert sind
 for($i=0;$i<$#word;$i++)
 {
    if($word_hash{"".$word[$i].""}!=23) #<---- das klappt nicht
    {
      $word_has{"".$word[$i].""}=23;
      print OUT "  |  " . $word[$i] . "\n";
    }
  }
}
Ich geh hier die Datei Zeile für Zeile durch und speichere das Vorkommen eines Wortes als assoz. Array (in Perl ja Hash) ab...aber irgendwie klappt das mit der Abfrage und dem speichern nicht so ganz. Ich krieg trotzdem alle Wörter...

Hat jemand ne Idee?

Danke sagt das Gulasch

//EDIT:

Ich hab auch schon solche Sachen probiert:
Perl:
   if($word_hash{$word[$i]}!=23)
    {
      $word_has{$word[$i]}=23;
      print OUT "  |  " . $word[$i] . "\n";
    }
####oder######
   if($word_hash{"$word[$i]"}!=23)
    {
      $word_has{"$word[$i]"}=23;
      print OUT "  |  " . $word[$i] . "\n";
    }
####oder#####
   if(!$word_hash{"$word[$i]"})
    {
      $word_has{"$word[$i]"}=1;
      print OUT "  |  " . $word[$i] . "\n";
    }
##und saemtliche Kombinationen
 
Zuletzt bearbeitet:
Du solltest Dir mal http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict anschauen...

Fehler solltest Du auch abfragen. Und wenn Du einen Hash verwendest geht das relativ leicht...

Code:
#!/usr/bin/perl

use strict;
use warnings;

my $input = '/path/to/input.txt';
my $output = '/path/to/output.txt';

my %hash;

open my $fh,"<",$input or die $!;
while(my $line = <$fh>){
    chomp $line;
    my @words = split /\t/,$line;
    @hash{@words} =  @words;
}
close $fh;

open my $wfh,'>',$output or die $!;
print $wfh $_,"\n" for @words;
close $wfh;

So als Grundlage, da ich ja nicht weiß, wie der Input tatsächlich aussieht.

das @hash{@words} = @words ist ein sogenannter Hashslice und macht im Prinzip das folgende:

$hash{$_} = $_ for(@words);
 
Tell me why i don´t like mondays.....

Ach du Schande...wenn man natürlich einmal "hash" und einmal "has" schreibt, wird einiges klar. Oh mein Gott!

Danke trotzdem.
 

Neue Beiträge

Zurück