TestTool/Datenimport: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „Eine Textdatei soll so umgewandelt werden, dass sie in eine relationale Datenbank integriert werden kann. ==Textdatei== *Textdatei besteht aus Fragen und Antw…“ |
Keine Bearbeitungszusammenfassung Markierungen: Manuelle Zurücksetzung Visuelle Bearbeitung |
||
(62 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Eine Textdatei soll so umgewandelt werden, dass sie | Eine Textdatei soll so umgewandelt werden, dass sie später als CSV-Datei weitergenutzt werden kann. | ||
==Textdatei== | ==Textdatei== | ||
Zeile 8: | Zeile 8: | ||
Beispielsweise: | Beispielsweise: | ||
1. Wie | 1. Wie wird in der Bash eine Variable gesetzt? | ||
A | A echo VARIABLE=Wert | ||
B | B echo $VARIABLE=Wert | ||
C | C export VARIABLE=Wert | ||
D | D $VARIABLE=Wert | ||
2. | E VARIABLE=Wert | ||
A | F export $VARIABLE=Wert | ||
B | 2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: | ||
C | A 131.107.4.24 | ||
D | B 131.107.3.24 | ||
E | C 130.107.3.24 | ||
D 131.107.3.66 | |||
3. | E 120.107.3.24 | ||
A | 3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? | ||
B | A 1010 0101.0001 0010.1010 1100.0100 1101 | ||
C | B 0101 1010.0001 0010.1101 1010.0100 1101 | ||
D | C 1010 0101.0001 0010.1101 1010.0100 1101 | ||
E | D 1010 0101.0010 0001.1101 1010.0100 0010 | ||
E 1010 0101.0001 0010.1101 1010.1101 0100 | |||
... | ... | ||
Zeile 35: | Zeile 35: | ||
*Die Datei sollen so formatiert werden, dass sie sich leicht als ''CSV''-Dateien in die Datenbank übertragen können | *Die Datei sollen so formatiert werden, dass sie sich leicht als ''CSV''-Dateien in die Datenbank übertragen können | ||
{|class="wikitable" | {|class="wikitable" | ||
! fragen.txt !! antworten.txt | ! fragen.txt !! antworten.txt | ||
|- | |- | ||
| | | | ||
1 Wie | 1 Wie wird in der Bash eine Variable gesetzt? | ||
2 | 2 Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: | ||
3 | 3 Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? | ||
... | ... | ||
| | | | ||
1 | 1 echo VARIABLE=Wert | ||
1 | 1 echo $VARIABLE=Wert | ||
1 | 1 export VARIABLE=Wert | ||
1 | 1 $VARIABLE=Wert | ||
2 | 1 VARIABLE=Wert | ||
2 | 1 export $VARIABLE=Wert | ||
2 | 2 131.107.4.24 | ||
2 Das ist | 2 131.107.3.24 | ||
2 | 2 130.107.3.24 | ||
2 | 2 131.107.3.66 | ||
3 | 2 120.107.3.24 | ||
3 | 3 1010 0101.0001 0010.1010 1100.0100 1101 | ||
3 | 3 0101 1010.0001 0010.1101 1010.0100 1101 | ||
3 | 3 1010 0101.0001 0010.1101 1010.0100 1101 | ||
3 1010 0101.0010 0001.1101 1010.0100 0010 | |||
3 1010 0101.0001 0010.1101 1010.1101 0100 | |||
... | |||
|} | |||
==Vorgehen== | |||
*Einfaches Rausnehmen und Ersetzen durch Reguläre Ausdrücke reicht nicht aus | |||
*Es muss eine Prozedur erstellt werden | |||
*Empfehlung: [[awk|AWK]], eine Programmiersprache zur Umwandlung von Textdateien | |||
===AWK-Script=== | |||
*Erster Entwurf: | |||
{ | |||
if($1 ~ /[0-9]./) | |||
{ | |||
row++; | |||
} | |||
print row, $0; | |||
} | |||
Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert: | |||
1 1. Wie wird in der Bash eine Variable gesetzt? | |||
1 A echo VARIABLE=Wert | |||
1 B echo $VARIABLE=Wert | |||
1 C export VARIABLE=Wert | |||
1 D $VARIABLE=Wert | |||
1 E VARIABLE=Wert | |||
1 F export $VARIABLE=Wert | |||
2 2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: | |||
2 A 131.107.4.24 | |||
2 B 131.107.3.24 | |||
2 C 130.107.3.24 | |||
2 D 131.107.3.66 | |||
2 E 120.107.3.24 | |||
3 3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? | |||
3 A 1010 0101.0001 0010.1010 1100.0100 1101 | |||
3 B 0101 1010.0001 0010.1101 1010.0100 1101 | |||
3 C 1010 0101.0001 0010.1101 1010.0100 1101 | |||
3 D 1010 0101.0010 0001.1101 1010.0100 0010 | |||
3 E 1010 0101.0001 0010.1101 1010.1101 0100 | |||
... | |||
*Zweiter Entwurf: | |||
{ | |||
if($1 ~ /[0-9]./) | |||
{ | |||
row++; | |||
$1 = ""; | |||
print row $0 >> "fragen.txt"; | |||
} | |||
else | |||
{ | |||
$1 = ""; | |||
print row, $0 >> "antworten.txt"; | |||
} | |||
} | |||
Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert; trennt Fragen und Antworten und packt sie in ihre jeweiligen Dateien ab. | |||
Das Ergebnis sind die beiden Dateien von [[Projekt:AWK#Ziel|oben]] | |||
===Konventionen zum Aufbau einer CSV-Datei=== | |||
*Trennzeichen von Datensätzen wird ''ein'' Zeichen verwendet. ''(Häufig ist es der Zeilenumbruch)'' | |||
*Trennzeichen von Datenfeldern(Spalten) wird ebenfalls ''ein'' Zeichen verwendet. ''(Meistens das Komma, aber auch das Semikolon)'' | |||
*Feldbegrenzerzeichen benutzt man um Sonderzeichen benutzen zu können. ''(Genommen wird das Anführungszeichen'''"''')'' | |||
*Erster Datensatz kann ein ''Kopfdatensatz'' sein, der die Spaltennamen definiert. | |||
*Jeder Datensatz soll die gleiche Anzahl Spalten enthalten. | |||
Bsp: | |||
ID;Fragetext;Frageart;Schwierigkeit;Lernwoche | |||
1;Wie wird in der Bash eine Variable gesetzt?;MC;Einfach;2 | |||
2;Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um:;MC;Schwer;2 | |||
3;Wie wird die IP-Adresse 165.18.218.66 binär dargestellt?;MC;Einfach;2 | |||
===Importieren der CSV-Datei=== | |||
Vorgehensweise in phpMyAdmin: | |||
#Tabelle auswählen und auf "Importieren" klicken | |||
#Format CSV auswählen | |||
#CSV-Datei hochladen | |||
#Formatspezifische Optionen ändern | |||
#Auf OK klicken | |||
Bei dem Import muss jedoch beachtet werden: | |||
*Die zu importierende CSV muss dieselbe Spaltenanzahl haben, wie die SQL-Tabelle | |||
*Leere Felder in der CSV müssen mit NULL gekennzeichnet sein | |||
*Ebenfalls mit NULL gekennzeichnet müssen Felder, die durch AUTO-INKREMENT gefüllt werden | |||
Bsp. | |||
ID;F_ID;Antworttext;richtig | |||
NULL;1;echo VARIABLE=Wert;NULL | |||
NULL;1;echo $VARIABLE=Wert;NULL | |||
NULL;1;export VARIABLE=Wert;NULL | |||
NULL;1;$VARIABLE=Wert;NULL | |||
NULL;1;VARIABLE=Wert;NULL | |||
NULL;1;export $VARIABLE=Wert;NULL | |||
NULL;2;131.107.4.24;NULL | |||
NULL;2;131.107.3.24;NULL | |||
.... | |||
Wird in der SQL-Datenbank so aussehen | |||
1;1;echo VARIABLE=Wert;NULL | |||
2;1;echo $VARIABLE=Wert;NULL | |||
3;1;export VARIABLE=Wert;NULL | |||
4;1;$VARIABLE=Wert;NULL | |||
5;1;VARIABLE=Wert;NULL | |||
6;1;export $VARIABLE=Wert;NULL | |||
7;2;131.107.4.24;NULL | |||
8;2;131.107.3.24;NULL | |||
.... | |||
---- | |||
Vorgehensweise mit mysqlimport: | |||
mysqlimport [options] db_name textdatei | |||
*Importiert eine Datei in eine Tabelle | |||
*Name der Datei muss exakt heißen wie der Tabellenname | |||
*Mit ''--fields-terminated-by'' und ''--fields-enclosed-by'' werden Spaltentrenner und Maskierungen angegeben | |||
Bsp: | |||
mysqlimport --fields-terminated-by=';' c1test1 antworten.txt | |||
c1test1.antworten: Records: 191 Deleted: 0 Skipped: 0 Warnings: 0 | |||
[[Kategorie:TestTool]] |
Aktuelle Version vom 23. Juni 2024, 08:44 Uhr
Eine Textdatei soll so umgewandelt werden, dass sie später als CSV-Datei weitergenutzt werden kann.
Textdatei
- Textdatei besteht aus Fragen und Antworten
- Vor jeder Frage ist eine Nummer
- Vor jeder Antwort steht ein Buchstabe(A-F)
- Jede Frage hat eine unterschiedliche Anzahl an Antworten
Beispielsweise:
1. Wie wird in der Bash eine Variable gesetzt? A echo VARIABLE=Wert B echo $VARIABLE=Wert C export VARIABLE=Wert D $VARIABLE=Wert E VARIABLE=Wert F export $VARIABLE=Wert 2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: A 131.107.4.24 B 131.107.3.24 C 130.107.3.24 D 131.107.3.66 E 120.107.3.24 3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? A 1010 0101.0001 0010.1010 1100.0100 1101 B 0101 1010.0001 0010.1101 1010.0100 1101 C 1010 0101.0001 0010.1101 1010.0100 1101 D 1010 0101.0010 0001.1101 1010.0100 0010 E 1010 0101.0001 0010.1101 1010.1101 0100 ...
Ziel
- Datei soll in zwei Dateien geteilt werden
- Fragen auf eine Datei, Antworten auf eine andere Datei
- Vor den Fragen und Antworten soll sich eine Nummer befinden, um ihre Zugehörigkeit später zu bestimmen
- Die Datei sollen so formatiert werden, dass sie sich leicht als CSV-Dateien in die Datenbank übertragen können
fragen.txt | antworten.txt |
---|---|
1 Wie wird in der Bash eine Variable gesetzt? 2 Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: 3 Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? ... |
1 echo VARIABLE=Wert 1 echo $VARIABLE=Wert 1 export VARIABLE=Wert 1 $VARIABLE=Wert 1 VARIABLE=Wert 1 export $VARIABLE=Wert 2 131.107.4.24 2 131.107.3.24 2 130.107.3.24 2 131.107.3.66 2 120.107.3.24 3 1010 0101.0001 0010.1010 1100.0100 1101 3 0101 1010.0001 0010.1101 1010.0100 1101 3 1010 0101.0001 0010.1101 1010.0100 1101 3 1010 0101.0010 0001.1101 1010.0100 0010 3 1010 0101.0001 0010.1101 1010.1101 0100 ... |
Vorgehen
- Einfaches Rausnehmen und Ersetzen durch Reguläre Ausdrücke reicht nicht aus
- Es muss eine Prozedur erstellt werden
- Empfehlung: AWK, eine Programmiersprache zur Umwandlung von Textdateien
AWK-Script
- Erster Entwurf:
{ if($1 ~ /[0-9]./) { row++; } print row, $0; }
Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert:
1 1. Wie wird in der Bash eine Variable gesetzt? 1 A echo VARIABLE=Wert 1 B echo $VARIABLE=Wert 1 C export VARIABLE=Wert 1 D $VARIABLE=Wert 1 E VARIABLE=Wert 1 F export $VARIABLE=Wert 2 2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um: 2 A 131.107.4.24 2 B 131.107.3.24 2 C 130.107.3.24 2 D 131.107.3.66 2 E 120.107.3.24 3 3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt? 3 A 1010 0101.0001 0010.1010 1100.0100 1101 3 B 0101 1010.0001 0010.1101 1010.0100 1101 3 C 1010 0101.0001 0010.1101 1010.0100 1101 3 D 1010 0101.0010 0001.1101 1010.0100 0010 3 E 1010 0101.0001 0010.1101 1010.1101 0100 ...
- Zweiter Entwurf:
{ if($1 ~ /[0-9]./) { row++; $1 = ""; print row $0 >> "fragen.txt"; } else { $1 = ""; print row, $0 >> "antworten.txt"; } }
Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert; trennt Fragen und Antworten und packt sie in ihre jeweiligen Dateien ab. Das Ergebnis sind die beiden Dateien von oben
Konventionen zum Aufbau einer CSV-Datei
- Trennzeichen von Datensätzen wird ein Zeichen verwendet. (Häufig ist es der Zeilenumbruch)
- Trennzeichen von Datenfeldern(Spalten) wird ebenfalls ein Zeichen verwendet. (Meistens das Komma, aber auch das Semikolon)
- Feldbegrenzerzeichen benutzt man um Sonderzeichen benutzen zu können. (Genommen wird das Anführungszeichen")
- Erster Datensatz kann ein Kopfdatensatz sein, der die Spaltennamen definiert.
- Jeder Datensatz soll die gleiche Anzahl Spalten enthalten.
Bsp:
ID;Fragetext;Frageart;Schwierigkeit;Lernwoche 1;Wie wird in der Bash eine Variable gesetzt?;MC;Einfach;2 2;Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um:;MC;Schwer;2 3;Wie wird die IP-Adresse 165.18.218.66 binär dargestellt?;MC;Einfach;2
Importieren der CSV-Datei
Vorgehensweise in phpMyAdmin:
- Tabelle auswählen und auf "Importieren" klicken
- Format CSV auswählen
- CSV-Datei hochladen
- Formatspezifische Optionen ändern
- Auf OK klicken
Bei dem Import muss jedoch beachtet werden:
- Die zu importierende CSV muss dieselbe Spaltenanzahl haben, wie die SQL-Tabelle
- Leere Felder in der CSV müssen mit NULL gekennzeichnet sein
- Ebenfalls mit NULL gekennzeichnet müssen Felder, die durch AUTO-INKREMENT gefüllt werden
Bsp.
ID;F_ID;Antworttext;richtig NULL;1;echo VARIABLE=Wert;NULL NULL;1;echo $VARIABLE=Wert;NULL NULL;1;export VARIABLE=Wert;NULL NULL;1;$VARIABLE=Wert;NULL NULL;1;VARIABLE=Wert;NULL NULL;1;export $VARIABLE=Wert;NULL NULL;2;131.107.4.24;NULL NULL;2;131.107.3.24;NULL ....
Wird in der SQL-Datenbank so aussehen
1;1;echo VARIABLE=Wert;NULL 2;1;echo $VARIABLE=Wert;NULL 3;1;export VARIABLE=Wert;NULL 4;1;$VARIABLE=Wert;NULL 5;1;VARIABLE=Wert;NULL 6;1;export $VARIABLE=Wert;NULL 7;2;131.107.4.24;NULL 8;2;131.107.3.24;NULL ....
Vorgehensweise mit mysqlimport:
mysqlimport [options] db_name textdatei
- Importiert eine Datei in eine Tabelle
- Name der Datei muss exakt heißen wie der Tabellenname
- Mit --fields-terminated-by und --fields-enclosed-by werden Spaltentrenner und Maskierungen angegeben
Bsp:
mysqlimport --fields-terminated-by=';' c1test1 antworten.txt c1test1.antworten: Records: 191 Deleted: 0 Skipped: 0 Warnings: 0