Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Aufeinanderfolgende Zeichen zählen und löschen (perl-Fall?)

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 10.10.2014 - 13:07    Titel: Aufeinanderfolgende Zeichen zählen und löschen (perl-Fall?) Antworten mit Zitat

Hallo,

gegeben ist folgender String / Textdatei:
Edit: Natürlich kann das auch anders aussehen, ist nur ein Beispiel.

Code:
#######
#     #
#######


Herauskommen soll folgendes:

Code:
#7
# 5#
#7


Sprich, eine "Kompression" durch das Löschen bzw. Zählen mehrerer aufeinanderfolgenden Zeichen. Dabei soll das aber erst ab 4 Zeichen anspringen, da ansonsten kein Platz eingespart wird.

Es gibt zwar in tr ein squeeze-Befehl:

Code:
do shell script "tr -cs '' <<< " & quoted form of megatext


Der reduziert zwar zuverlässig, leider kann damit aber nicht gezählt werden.

Verkapselte AppleScript-Schleifen sind viel zu umständlich bzw. zu unperformant. Wüßte jemand, wie man das in sed, awk oder perl elegant lösen kann?

Vielen Dank für alles ;-)
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 13.10.2014 - 08:08    Titel: Antworten mit Zitat

Inzwischen habe ich einen ersten Anhaltspunkt für perl gefunden (leider funktioniert es in sed nicht?):

Code:
do shell script "perl -pe 's/(.)(?=.*?\\1)//g' <<< " & quoted form of megatext


Funktioniert genau wie tr, nur nicht so performant, dafür hat man eine Kontrolle. Aber das Zählen, der Kernpunkt, ist eben nicht gelöst.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 25.10.2014 - 13:57    Titel: Antworten mit Zitat

Hallo Martin,
dein Kompressionsverfahren ist aber nicht umkehrbar, oder besteht der Originaltext immer aus Sonderzeichen?

Wenn als Originaltext z.B. eine Folge #7 erscheint, wir die ja nicht komprimiert. Was machst du aber jetzt, wenn du dekomprimieren willst?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 25.10.2014 - 16:52    Titel: Antworten mit Zitat

Wie dem auch sei, ich habe ein awk-Programm dazu geschrieben. Vielleicht willst du es mal testen.

Code:
awk ' {n=split($0,c,"")
 
for(i=1;i<=n;){
   for(j=i+1;j<=n;j++){
      if( c[j]==c[i] )
        continue;
      else{ 
       out(i,j,c[i]);
       i=j;
       }       
    }
    out(i,j,c[i]);
     break;
   }
   print "";
}
function out(i,j,chr){
    if(j-i>3)
      printf("%c%d",chr,j-i);
      else
       for(k=i;k<j;k++)
         printf("%c",chr);
   }'


Ich habe es nur mit dem Terminal getestet, also noch nicht in Apple-Script.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 28.12.2014 - 10:04    Titel: Antworten mit Zitat

Alter thread. Trotzdem hier die funktionerende Perl Variante:

Code:
perl -pe 's/(.)(\1+)/$1 . (1+length($2))/ge'

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter