TestTool/Datenimport: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K (Dirkwagner verschob die Seite TestTool:Datenimport nach TestTool/Datenimport, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „:“ durch „/“)
 
(54 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Eine Textdatei soll so umgewandelt werden, dass sie als CSV-Datei in eine relationale Datenbank integriert werden kann.
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 lautet der Text zu dieser Frage?
  1. Wie wird in der Bash eine Variable gesetzt?
  A Keine Ahnung
  A echo VARIABLE=Wert
  B Frag mal Google
  B echo $VARIABLE=Wert
  C Ähm...
  C export VARIABLE=Wert
  D Ich nimm den Publikumsjoker
  D $VARIABLE=Wert
  2. Was halten Sie zum Thema IT-Sicherheit?
E VARIABLE=Wert
  A Was ist IT-Sicherheit?
F export $VARIABLE=Wert
  B Finger weg
  2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um:
  C Ich kenn mich nicht aus
  A 131.107.4.24
  D Das ist doch dieser Alien
  B 131.107.3.24
  E Fragen wir mal Google
  C 130.107.3.24
F Windows ist total toll
  D 131.107.3.66
  3. Was ist besser: Windows oder Linux?
  E 120.107.3.24
  A Windows
  3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt?
  B Linux
  A 1010 0101.0001 0010.1010 1100.0100 1101
  C Beides
  B 0101 1010.0001 0010.1101 1010.0100 1101
  D Keins
  C 1010 0101.0001 0010.1101 1010.0100 1101
  E Kenn ich nicht
  D 1010 0101.0010 0001.1101 1010.0100 0010
...
  E 1010 0101.0001 0010.1101 1010.1101 0100
  ...
  ...


Zeile 39: Zeile 39:
|-
|-
|
|
  1 Wie lautet der Text zu dieser Frage?
  1 Wie wird in der Bash eine Variable gesetzt?
  2 Was halten Sie von IT-SIcherheit?
  2 Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um:
  3 Was ist besser: Windows und Linux?
  3 Wie wird die IP-Adresse 165.18.218.66 binär dargestellt?
  ...
  ...
|
|
  1 Keine Ahnung
  1 echo VARIABLE=Wert
  1 Frag mal Google
  1 echo $VARIABLE=Wert
  1 Ähm...
  1 export VARIABLE=Wert
  1 Ich nimm den Publikumsjoker
1 $VARIABLE=Wert
  2 Was ist IT-Sicherheit?
  1 VARIABLE=Wert
  2 Finger weg
  1 export $VARIABLE=Wert
  2 Ich kenn mich nicht aus
  2 131.107.4.24
  2 Das ist doch dieser Alien
  2 131.107.3.24
  2 Fragen wir mal Google
  2 130.107.3.24
  2 Windows ist total toll
  2 131.107.3.66
  3 Windows
  2 120.107.3.24
  3 Linux
  3 1010 0101.0001 0010.1010 1100.0100 1101
  3 Beides
  3 0101 1010.0001 0010.1101 1010.0100 1101
  3 Keins
  3 1010 0101.0001 0010.1101 1010.0100 1101
  3 Kenn ich nicht
  3 1010 0101.0010 0001.1101 1010.0100 0010
  3 1010 0101.0001 0010.1101 1010.1101 0100
  ...
  ...
|}
|}
Zeile 65: Zeile 66:
*Einfaches Rausnehmen und Ersetzen durch Reguläre Ausdrücke reicht nicht aus
*Einfaches Rausnehmen und Ersetzen durch Reguläre Ausdrücke reicht nicht aus
*Es muss eine Prozedur erstellt werden
*Es muss eine Prozedur erstellt werden
*Empfehlung: [[Programmierung:AWK|AWK]], eine Programmiersprache zur Umwandlung von Textdateien
*Empfehlung: [[awk|AWK]], eine Programmiersprache zur Umwandlung von Textdateien


===AWK-Script===
===AWK-Script===
Zeile 78: Zeile 79:


Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert:
Führt eine Nummer vorne ein, die Frage und deren Antworten nummeriert:
  1 1. Wie lautet der Text zu dieser Frage?
  1 1. Wie wird in der Bash eine Variable gesetzt?
  1 A Keine Ahnung
  1 A echo VARIABLE=Wert
  1 B Frag mal Google
  1 B echo $VARIABLE=Wert
  1 C Ähm...
  1 C export VARIABLE=Wert
  1 D Ich nimm den Publikumsjoker
  1 D $VARIABLE=Wert
  2 2. Was halten Sie zum Thema IT-Sicherheit?
1 E VARIABLE=Wert
  2 A Was ist IT-Sicherheit?
1 F export $VARIABLE=Wert
  2 B Finger weg
  2 2. Wandeln sie die binäre IP-Adresse 1000 0011.0110 1011.0000 0011.0001 1000 in dezimaler Form um:
  2 C Ich kenn mich nicht aus
  2 A 131.107.4.24
  2 D Das ist doch dieser Alien
  2 B 131.107.3.24
  2 E Fragen wir mal Google
  2 C 130.107.3.24
2 F Windows ist total toll
  2 D 131.107.3.66
  3 3. Was ist besser: Windows oder Linux?
  2 E 120.107.3.24
  3 A Windows
  3 3. Wie wird die IP-Adresse 165.18.218.66 binär dargestellt?
  3 B Linux
  3 A 1010 0101.0001 0010.1010 1100.0100 1101
  3 C Beides
  3 B 0101 1010.0001 0010.1101 1010.0100 1101
  3 D Keins
  3 C 1010 0101.0001 0010.1101 1010.0100 1101
  3 E Kenn ich nicht
  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 29. März 2023, 12:24 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:

  1. Tabelle auswählen und auf "Importieren" klicken
  2. Format CSV auswählen
  3. CSV-Datei hochladen
  4. Formatspezifische Optionen ändern
  5. 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