as 2007-08-08 00:16:43 UTC
FreeBSD ports repository
Modified files:
books/developers-handbook/x86 chapter.sgml
Log:
Kapitel 12.12 von ds@ uebersetzt.
Revision Changes Path
1.3 +257 -341 de-docproj/books/developers-handbook/x86/chapter.sgml
Index: chapter.sgml
===================================================================
RCS file: /home/cvs/de-docproj/books/developers-handbook/x86/chapter.sgml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -I$FreeBSDde.*$ -r1.2 -r1.3
--- chapter.sgml 7 Aug 2007 14:58:58 -0000 1.2
+++ chapter.sgml 8 Aug 2007 00:16:43 -0000 1.3
@@ -3167,198 +3167,144 @@
</sect1>
-<sect1 id="x86-one-pointed-mind">
-<title>One-Pointed Mind</title>
+ <sect1 id="x86-one-pointed-mind">
+ <title>One-Pointed Mind</title>
-<para>
-As a student of Zen, I like the idea of a one-pointed mind:
-Do one thing at a time, and do it well.
-</para>
-
-<para>
-This, indeed, is very much how &unix; works as well. While
-a typical &windows; application is attempting to do everything
-imaginable (and is, therefore, riddled with bugs), a
-typical &unix; program does only one thing, and it does it
-well.
-</para>
-
-<para>
-The typical &unix; user then essentially assembles his own
-applications by writing a shell script which combines the
-various existing programs by piping the output of one
-program to the input of another.
-</para>
-
-<para>
-When writing your own &unix; software, it is generally a
-good idea to see what parts of the problem you need to
-solve can be handled by existing programs, and only
-write your own programs for that part of the problem
-that you do not have an existing solution for.
-</para>
-
-<sect2 id="x86-csv"><title>CSV</title>
-
-<para>
-I will illustrate this principle with a specific real-life
-example I was faced with recently:
-</para>
-
-<para>
-I needed to extract the 11th field of each record from a
-database I downloaded from a web site. The database was a
-<acronym>CSV</acronym> file, i.e., a list of
-<emphasis>comma-separated values</emphasis>. That is quite
-a standard format for sharing data among people who may be
-using different database software.
-</para>
-
-<para>
-The first line of the file contains the list of various fields
-separated by commas. The rest of the file contains the data
-listed line by line, with values separated by commas.
-</para>
+ <para>Als ein Zen-Schüler liebe ich die Idee eines fokussierten
+ Bewußtseins: Tu nur ein Ding zur gleichen Zeit, aber mache
+ es richtig.</para>
+
+ <para>Das ist ziemlich genau die gleiche Idee, welche &unix; richtig
+ funktionieren lässt. Während eine typische &windows;-Applikation
+ versucht alles Vorstellbare zu tun (und daher mit Fehler durchsetzt
+ ist), versucht eine &unix;-Applikation nur eine Funktion zu erfüllen
+ und das gut.</para>
+
+ <para>Der typische &unix;-Nutzer stellt sich sein eigenes System durch
+ Shell-Skripte zusammen, die er selbst schreibt, und welche die Vorteile
+ bestehender Applikationen dadurch kombinieren, indem sie die Ausgabe
+ eines Programmes als Eingabe in ein anderes Programm durch eine Pipe
+ übergeben.</para>
+
+ <para>Wenn Sie ihre eigene &unix;-Software schreiben, ist es generell
+ eine gute Idee zu betrachten, welcher Teil der Problemlösung durch
+ bestehende Programme bewerkstelligt werden kann. Man schreibt nur die
+ Programme selbst, für die keine vorhandene Lösung existiert.</para>
+
+ <sect2 id="x86-csv">
+ <title>CSV</title>
+
+ <para>Ich will dieses Prinzip an einem besonderen Beispiel
+ aus der realen Welt demonstrieren, mit dem ich kürzlich
+ konfrontiert wurde:</para>
+
+ <para>Ich mußte jeweils das elfte Feld von jedem Datensatz aus einer
+ Datenbank extrahieren, die ich von einer Webseite heruntergeladen
+ hatte. Die Datenbank war eine <acronym>CSV</acronym>-Datei, d.h.
+ eine Liste von <emphasis>Komma-getrennten Werten</emphasis>. Dies
+ ist ein ziemlich gewöhnliches Format für den Code-Austausch zwischen
+ Menschen, die eine unterschiedliche Datenbank-Software nutzen.</para>
+
+ <para>Die erste zeile der Datei enthält eine Liste der Felder durch
+ Kommata getrennt. Der Rest der Datei enthält die einzelnen Datensätze
+ mit durch Kommata getrennten Werten in jeder Zeile.</para>
+
+ <para>Ich versuchte <application>awk</application> unter Nutzung des
+ Kommas als Trenner. Da aber einige Zeilen durch in Bindestriche
+ gesetzte Kommata getrennt waren, extrahierte <application>awk</application>
+ das falsche Feld aus diesen Zeilen.</para>
+
+ <para>Daher mußte ich meine eigene Software schreiben, um das elfte Feld
+ aus der <acronym>CSV</acronym>-Datei auszulesen. Aber durch Anwendung
+ der &unix;-Philosophie mußte ich nur einen einfachen Filter schreiben,
+ das Folgende tat:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Entferne die erste Zeile aus der Datei.</para>
+ </listitem>
+
+ <listitem>
+ <para>Ändere alle Kommata ohne Anführungszeichen in einen anderen
+ Buchstaben.</para>
+ </listitem>
+
+ <listitem>
+ <para>Entferne alle Anführungszeichen.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Streng genommen könnte ich <application>sed</application> benutzen,
+ um die erste Zeile der Datei zu entfernen, aber das zu Bewerkstelligen
+ war in meinem Programm sehr einfach, also entschloss ich mich dazu und
+ reduzierte dadurch die Größe der Pipeline.</para>
+
+ <para>Unter Berücksichtigung aller Faktoren kostete mich das Schreiben
+ dieses Progammes ca. 20 Minuten. Das Schreiben eines Programmes, welches
+ jeweils das elfte Feld aus einer <acronym>CSV</acronym>-Datei extrahiert
+ hätte wesentlich länger gedauert und ich hätte es nicht wiederverwenden
+ können, um ein anderes Feld zu extrahieren aus irgendeiner anderen
+ Datenbank.</para>
+
+ <para>Diesmal entschied ich mich dazu, etwas mehr Arbeit zu investieren,
+ als man normalerweise für ein typisches Tutorial verwenden würde:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Es parst die Kommandozeilen nach Optionen.</para>
+ </listitem>
+
+ <listitem>
+ <para>Es zeigt die richtige Nutzung an, falls es ein falsches Argument findet.</para>
+ </listitem>
+
+ <listitem>
+ <para>Es gibt vernünftige Fehlermeldungen aus.</para>
+ </listitem>
+
+ </itemizedlist>
+ <para>Hier ist ein Beispiel für seine Nutzung:</para>
+
+ <screen>Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]</screen>
+
+ <para>Alle Parameter sind optional und können in beliebiger Reihenfolge auftauchen.</para>
+
+ <para>Der <parameter>-t</parameter>-Parameter legt fest, was zu die Kommata zu ersetzen
+ sind. Der <constant>tab</constant> ist die Vorgabe hierfür. Zum Beispiel wird
+ <parameter>-t;</parameter> alle unquotierten Kommata mit Semikolon ersetzen.</para>
+
+ <para>Ich brauche die <parameter>-c</parameter>-Option nicht, aber sie könnte zukünftig
+ nützlich sein. Sie ermöglicht mir festzulegen, daß ich einen anderen Buchstaben
+ als das Kommata mit etwas anderem ersetzen möchte. Zum Beispiel wird der Parameter
+ <parameter>-c@</parameter> alle @-Zeichen ersetzen (nützlich, falls man eine Liste
+ von EmAil-Adressen in Nutzername und Domain aufsplitten will).</para>
+
+ <para>Die <parameter>-p</parameter>-Option erhält die erste Zeile, d.h. die erste Zeile
+ der Datei wird nicht gelöscht. Als Vorgabe löschen wir die erste Zeile, weil die
+ <acronym>CSV</acronym>-Datei in der ersten Zeile keine Daten, sondern Feldbeschreibungen
+ enthält.</para>
+
+ <para>Die Parameter <parameter>-i</parameter>- und <parameter>-o</parameter>-Optionen
+ erlauben es mir, die Ausgabe- und Eingabedateien festzulegen. Vorgabe sind
+ <filename>stdin</filename> und <filename>stdout</filename>, also ist es ein
+ regulärer &unix;-Filter.</para>
+
+ <para>Ich habe sichergestellt, daß sowohl <parameter>-i filename</parameter> und
+ <parameter>-ifilename</parameter> akzeptiert werden. Genauso habe ich dafür Sorge
+ getragen, daß sowohl Eingabe- als auch Ausgabedateien festgelegt werden können.</para>
+
+ <para>Um das elfte Feld jeden Datensatzes zu erhalten kann ich nun folgendes eingeben:</para>
+
+ <screen>&prompt.user; <userinput>csv '-t;' <replaceable>data.csv</replaceable> | awk '-F;' '{print $11}'</userinput></screen>
+
+ <para>Der Code speichert die Optionen (bis auf die Dateideskriptoren) in
+ <varname role="register">EDX</varname>: Das Kommata in <varname role="register">DH</varname>,
+ den neuen Feldtrenner in <varname role="register">DL</varname> und das Flag für
+ die <parameter>-p</parameter>-Option in dem höchsten Bit von
+ <varname role="register">EDX</varname>. Ein kurzer Abgleich des Zeichens wird
+ uns also eine schnelle Entscheidung darüber erlauben, was zu tun ist.</para>
----------------------------------------------
Diff block truncated. (Max lines = 200)
----------------------------------------------
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-cvs-doc" in the body of the message
Received on Wed 08 Aug 2007 - 02:18:16 CEST