lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:challenge4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:challenge4 [2021/02/25 09:22] – [Regular Expressions] Ivo Blöchligerlehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:challenge4 [2021/03/04 12:33] (current) – [Summe von Zahlen] Ivo Blöchliger
Line 1: Line 1:
 +====== Regular Expressions und HTML-Dateien ======
 +===== Einführungsbeispiel =====
 +Aus einer HTML-Datei sollen die Links mit verlinktem Text extrahiert werden. Beispiel:
 +<code html>
 +<a href="https://fginfo.ksbg.ch/" class="bla">Fachgruppe Informatik</a>
 +</code>
 +Der HTML-Tag ''<a>'' definiert einen Link. Im Attribut ''href'' steht die URL (Web-Adresse). Der verlinkte Text steht danach (beendet durch ein </a>).
 +
 +Das gewünschte CSV-Format ist folgendes:
 +<code text>
 +Fachgruppe Informatik;https://fginfo.ksbg.ch/
 +</code>
 +
 +Die Idee ist natürlich, die Umwandlung in einem Aufwasch für die ganze Datei zu erledigen.
 +<WRAP todo>
 +  * Wir verwenden folgende HTML-Datei: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:page.html}}, die Sie bitte herunterladen und in NotePad++ öffnen.
 +  * Löschen Sie bitte alle Zeilen, die die Zeichenkette ''<a href='' **nicht** enthalten. Machen Sie eine Internetsuche (am besten auf Englisch), wie Sie vorgehen können.
 +  * Man stellt fest, dass es Zeilen gibt, die noch mehr als einen Link enthalten. Wir werden darum ''<a href'' durch ''\n<a href'' (d.h. wir fügen einen Zeilenumbruch vor jedem link ein). Dazu muss im "Search Mode" "Extended" oder "Regular Expression" aktiviert sein.
 +  * Löschen Sie abermals die Zeilen, die ''<a href'' nicht enthalten.
 +  * Führen Sie nun folgende Ersetzung durch, wobei der "Search Mode" auf **Regular Expression** gesetzt werden muss:
 +    * Ersetzen Sie ''<a href=<nowiki>"</nowiki>(.*?)<nowiki>"</nowiki>.*?>(.*?)</a.*'' durch ''$2;$1''. //Das ist eine Regular Expression, mehr dazu später//
 +  * Man stellt fest, dass im Text noch Strichpunkte vorkommen. Diese stehen aber beim ''&quot;'', was für Anführungszeichen steht.
 +  * Ersetzen Sie ''&quot;'' durch ''<nowiki>"</nowiki>''
 +  * Als letztes vervollständigen sie die Links durch ''<nowiki>https://fginfo.ksbg.ch</nowiki>'' durch eine geeignete Ersetzung.
 +  * Speichern Sie die Datei als ''links.csv'' und öffnen Sie diese mit Excel. Welches Problem gibt es noch?
 +  * Schliessen Sie Excel wieder (sonst kann die Datei ''links.csv'' mit Notepad++ nicht wieder gespeichert werden).
 +  * In Notepad++ kann die Codierung angepasst werden. Im Menu Encoding -> Convert to ANSI. Speichern Sie wieder mit **Ctrl-S**.
 +  * Öffnen Sie die Datei noch einmal mit Excel und überprüfen Sie, ob das Problem jetzt behoben ist.
 +</WRAP>
 +
 +<hidden Lösungsvorschläge>
 +  * Eine Suche nach ''notepad++ delete all lines not containing a pattern'' hat als ersten Treffer folgende Seite ergeben: https://superuser.com/questions/290247/delete-all-lines-in-notepad-except-lines-containing-a-word-i-need/292677 wobei wieder der erste Lösungsvorschlag zum Erfolg führt.
 +</hidden>
 +
 +
 +<WRAP info>
 +  * Das **Encoding** gibt an, wie Buchstaben (insbesondere Sonderzeichen wie ä, é etc.) codiert, d.h. binär dargestellt werden.
 +  * Praktisch alle Webseiten und Computersysteme verwenden heute (und schon seit langem) das universelle Encoding UTF-8, ausser natürlich Microsoft Windows :-/
 +</WRAP>
 +
 +===== Regular Expressions =====
 +  * {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:regexp.pdf|Slides zu Regular Expressions}}
 +
 +
 +===== Summe von Zahlen =====
 +<WRAP todo>
 +Bestimmen Sie die Summe der Zahlen in folgender Datei: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:zahlen.txt}}.
 +
 +Beachten Sie, dass
 +alle Zahlen Ganzzahlen sind, d.h. das Komma steht als Trennzeichen für
 +Tausender (amerikanisches Format). Beachten Sie ebenfalls, dass die 
 +Anzahl Leerschläge zwischen den Zahlen variabel sind.
 +
 +Die Summe ist 55'061'026.
 +</WRAP>
 +
 +<hidden Lösungshilfen>
 +  * Die Kommas können einfach durch nichts ersetzt werden.
 +  * Alle aufeinanderfolgenden Leerschläge müssen durch einen einzigen Strickpunkt '';'' ersetzt werden. Formulieren Sie dazu eine Regular Expression.
 +</hidden>
 +===== Oh no, pdf =====
 +<WRAP todo>
 +  * Übertragen Sie folgende Tabelle in Excel und überprüfen Sie die Summe: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:ohnopdf.pdf}}
 +  * Für diejenigen, die es so richtig mühsam wollen, gleiche Aufgabe aber mit einem "Scan" der PDF-Seite: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:ohnopdf.png?50}}
 +</WRAP>
 +
 +===== HTML-Tabelle nach CSV konvertieren =====
 +<WRAP todo>
 +  * Erstellen Sie eine von Excel lesbare CSV-Datei aus folgender HTML-Tabelle: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:table1.html}}
 +  * Berechnen Sie die Summe aller Einträge.
 +Hinweis: Es gibt viele Möglichkeiten, diese Aufgabe zu lösen.
 +</WRAP>
 +
 +<hidden Lösungshilfen>
 +  * Oft ist ein Copy-Paste aus dem Browser einfacher, als die Analyse des HTML-Codes.
 +  * Es gibt online-Tools, die diese Konversionen machen, googeln Sie danach (auch auf English!)
 +  * Das "Problem" sind hier die Tausendertrennzeichen (Apostroph), die müssen wohl oder übel in einem Text-Editor (für Sie Notepad++) ersetzt werden.
 +</hidden>