staging.inyokaproject.org

RegEx negieren und modulo Rechnung

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Lisyrah

Anmeldungsdatum:
16. Januar 2021

Beiträge: 1

Hallo zusammen, ich bin eine blutige Anfängerin in Sachen Shellscript Progammierung und benötige etwas Hilfe bei meinem Programm. Als Aufgabe habe ich eine Bücherliste (Titel, Autor, Verlag etc.) aus einer Exel Tabelle und soll diverse Infos herausfiltern. Das meiste habe ich geschafft aber leider hänge ich seit Wochen an einer Aufgabe fest und komme gar nicht weiter. Die Aufgabe lautet:

"Es sollen alle in der Datenbank eingetragenen ISBNs geprüft werden. Diese sind entweder zehn- oder dreizehnstellig und dürfen nur Ziffern enthalten (Ausnahme: die letzte Stelle der zehnstelligen ISBN kann ein ’X’ enthalten, das der 10 entspricht). Bindestriche sind zu ignorieren. Für jede zehnstellige ISBN mit den Ziffern z0z1z2...z9 prüfen Sie bitte, ob folgende Bedingung wahr ist: ¨ z0 + 2z1 + 3z2 + 4z3 + 5z4 + 6z5 + 7z6 + 8z7 + 9z8 + 10z9 mod 11 = 0 Bei Verletzung dieser Bedingung geben Sie die fehlerhafte ISBN mit einer deskriptiven Fehlermeldung aus, genauso bei falscher Größe oder falschen Ziffern."

So, ich hatte mir überlegt ich filtere zuerst alle richtigen ISBNs raus. Dazu habe ich folgenden Code:

1
cut -d ';' -f8 Exeldatei | egrep -o "([0123456789]{9}[0123456789X]{1})|([0123456789]{13}) 

Um mir jetzt die fehlerhaften ISBNS heraus zu bekommen, wollte ich diesen Code einfach negieren und mir danach die übriggebliebenen ausgeben lassen. Geplant hatte ich das so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#ISBN
#richtige ISBNs

ISBN=$(( cut -d ';' -f8 Exeldatei | egrep -o "([0123456789]{9}[0123456789X]{1})|([0123456789]{13}) ))  

if [[ $1 = isbn ]]

#Ausgabe falscher ISBNs 

then 
     echo -e "Ausgabe falscher ISBNs: 
	`cat Exeldatei | awk -F ";" '{ if ($1 != "$ISBN" ) { print "falsche ISBNs: ", $1 } }' ` "

fi
exit 0 
 
fi 

Das klappt leider nicht so wie erhofft. Und was die modulo Aufgabe angeht, bin ich komplett planlos. Vielleicht hat ja jemand einen Tipp für mich, darüber wäre ich sehr dankbar !! Liebe Grüße

Lisyrah

Bearbeitet von rklm:

Syntaxhighlighting. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion!

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

der reguläre Ausdruck ist auch nicht treffend. In deiner Beschreibung steht ja, dass die ISBN Bindestriche - enthalten darf. Das fehlt bei dir.

Ich würde wahrscheinlich so vorgehen:

  • Daten aus der CSV-Datei extrahieren.

  • alle - durch nichts ersetzen, also das z.B. aus 123-456-789X 123456789X wird.

  • dann auf Länge prüfen und alle 13-stellien ISBN verwerfen

  • dann gegen eine RegEx auf gültige Zeichen prüfen

  • wenn ok → in 10 Ziffern zerlegen und Rechnen

Was verstehst du an der Module-Division nicht?

Gruß, noisefloor

Antworten |