Anzeige:
Ergebnis 1 bis 4 von 4

Thema: gleiche Anteile zweier strings ermitteln?

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.04.2001
    Beiträge
    89

    gleiche Anteile zweier strings ermitteln?

    Hallo Leute,

    ich möchte mir ein Skript schreiben, welchens gleiche Anteile in Dateinamen entfernt. An sich ist das Entfernen kein Problem, sondern das Ermitteln der gleichen Anteile. Angenommen ich habe ein paar Dateien nach dem Muster:

    "datei1 - meinedatei"
    "datei2 - meinedatei"

    oder

    "datei1 - deinedatei"
    "datei2 - deinedatei"


    Dann soll das Skript selbstständig herausfinden, das der gleiche Anteil im Dateinamen "meinedatei" bzw. "deinedatei" ist.

    Hat sich vielleicht schonmal jemand die Arbeit gemacht ? Ansonsten bin ich auch für jeden Tip, welches der zahlreichen unix-Werkzeuge man hier zu Hilfe nehmen kann dankbar...

    Gruß, Picard

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    wäre es nicht einfacher ein skript zu schreiben, das den angegebenen
    string aus allen dateinamen zu entfernen versucht ?
    ansonsten sehe ich schwarz für eine generische lösung deines problems

    gruß
    Arthur

    ps.
    was den gleichen Anteil angeht
    "datei1 - meinedatei"
    "datei2 - meinedatei"
    -----------------------
    ="datei - meinedatei"
    ---------
    irc.mrunix.de #mrunix

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    du könntest das natürlich einfach zeichen für Zeichen machen. Zuerst vom Anfang, dann vom Ende.

    Aber damit das einigermassen einfach und zuverlässig geht, müssen die Dateien natürlich dann auch alle recht gleich heissen - keine Ausnahmen und so

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Naja, du könntest schon Datei für Datei durchgehen und den Namen Zeichen für Zeichen wieder zusammen setzten so in etwa:
    Code:
    # pseudo code
    # wird garantiert nirgendwo laufen ;)
    # orientiert sich an C und PERL
    # für denkfehler keine haftung
    # war zu faul das wirklich zu implementieren und zu testen
    $u = -1; # hilft uns die uebereinstimmungen zu zählen
    $iold = -1; # hilft uns zu sehen in welchen durchlauf der letzte treffer kam so dass wir den treffer möglichst "lang" machen können
    for each (@dateinamen) { # alle datei(nam)en durchgehen
      for ($i = 0; $i < length($dateiname; $i++) { # $i als offset
        for ($j = 0; j < length($dateiname; $i++) { # $j als länge
          $k = 0; # $k zählt die treffer
          for each (@dateinamen) { # alle namen durchgehen
            if (strcontains($dateiname, # wenn teilstring enthalten
                            substring($dateiname, $i, $j))) {
              $k++; # zähler hochzählen
            }
          }
          if ($k == elements(@dateinamen) { # wenn zähler gleich anzahl dateinamen
            if ($i != $iold) { # wenn neuer durchlauf
              $iold = $i; # die laufnummer merken
              if (! contains(@uebereinstimmungen, substring($dateiname, $i, $j))) { wenn der treffer nicht schon da ist
                $u++; # und die trefferzahl um eins erhöhen
              }
            }
            if (! contains(@uebereinstimmungen, substring($dateiname, $i, $j))) { wenn der treffer nicht schon da ist
              $uebereinstimmungen[$u] = substring($dateiname, $i, $j); # treffer speichern
            }
          }
        }
      }
    }
    
    for each (@dateinamen) { # für jeden dateinamen
      for each (@uebereinstimmungen) { # für jede uebereinstimmung
        frename($dateiname, # datei umbenennen in dateinamen ohne den uebereinstimmenden teilstring
                strpartreplace($dateiname, $ uebereinstimmung, ''));
      }
    }
    Dann würds die allerdings gnadenlos _alle_ Übereinstimmungen raushauen, also auch z.B. wenn nur alle Dateinamen ein 'e' drinne haben wird das fliegen, oder z.B. einen Punkt. Da müsste man dann halt noch Ausnahmen oder begrenzungen einbauen. Mehrfache würden auch fliegen, also aus deinem Beispiel "datei1 - meinedatei" und "datei2 - meinedatei" würde letztlich dann "1" und "2" werden...
    chmod -R +t /*

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •