cvs commit: de-docproj/books/developers-handbook/x86 chapter.sgml

From: Aron Schlesinger <as(at)doc.bsdgroup.de>
Date: Wed, 8 Aug 2007 00:16:43 GMT

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&uuml;ler liebe ich die Idee eines fokussierten
  + Bewu&szlig;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&auml;sst. W&auml;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&uuml;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
  + &uuml;bergeben.</para>
  +
  + <para>Wenn Sie ihre eigene &unix;-Software schreiben, ist es generell
  + eine gute Idee zu betrachten, welcher Teil der Probleml&ouml;sung durch
  + bestehende Programme bewerkstelligt werden kann. Man schreibt nur die
  + Programme selbst, f&uuml;r die keine vorhandene L&ouml;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&uuml;rzlich
  + konfrontiert wurde:</para>
  +
  + <para>Ich mu&szlig;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&ouml;hnliches Format f&uuml;r den Code-Austausch zwischen
  + Menschen, die eine unterschiedliche Datenbank-Software nutzen.</para>
  +
  + <para>Die erste zeile der Datei enth&auml;lt eine Liste der Felder durch
  + Kommata getrennt. Der Rest der Datei enth&auml;lt die einzelnen Datens&auml;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&szlig;te ich meine eigene Software schreiben, um das elfte Feld
  + aus der <acronym>CSV</acronym>-Datei auszulesen. Aber durch Anwendung
  + der &unix;-Philosophie mu&szlig;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>&Auml;ndere alle Kommata ohne Anf&uuml;hrungszeichen in einen anderen
  + Buchstaben.</para>
  + </listitem>
  +
  + <listitem>
  + <para>Entferne alle Anf&uuml;hrungszeichen.</para>
  + </listitem>
  + </itemizedlist>
  +
  + <para>Streng genommen k&ouml;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&ouml;&szlig;e der Pipeline.</para>
  +
  + <para>Unter Ber&uuml;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&auml;tte wesentlich l&auml;nger gedauert und ich h&auml;tte es nicht wiederverwenden
  + k&ouml;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&uuml;r ein typisches Tutorial verwenden w&uuml;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&uuml;nftige Fehlermeldungen aus.</para>
  + </listitem>
  +
  + </itemizedlist>
  + <para>Hier ist ein Beispiel f&uuml;r seine Nutzung:</para>
  +
  + <screen>Usage: csv [-t&lt;delim&gt;] [-c&lt;comma&gt;] [-p] [-o &lt;outfile&gt;] [-i &lt;infile&gt;]</screen>
  +
  + <para>Alle Parameter sind optional und k&ouml;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&uuml;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&ouml;nnte zuk&uuml;nftig
  + n&uuml;tzlich sein. Sie erm&ouml;glicht mir festzulegen, da&szlig; ich einen anderen Buchstaben
  + als das Kommata mit etwas anderem ersetzen m&ouml;chte. Zum Beispiel wird der Parameter
  + <parameter>-c@</parameter> alle @-Zeichen ersetzen (n&uuml;tzlich, falls man eine Liste
  + von EmAil-Adressen in Nutzername und Domain aufsplitten will).</para>
  +
  + <para>Die <parameter>-p</parameter>-Option erh&auml;lt die erste Zeile, d.h. die erste Zeile
  + der Datei wird nicht gel&ouml;scht. Als Vorgabe l&ouml;schen wir die erste Zeile, weil die
  + <acronym>CSV</acronym>-Datei in der ersten Zeile keine Daten, sondern Feldbeschreibungen
  + enth&auml;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&auml;rer &unix;-Filter.</para>
  +
  + <para>Ich habe sichergestellt, da&szlig; sowohl <parameter>-i filename</parameter> und
  + <parameter>-ifilename</parameter> akzeptiert werden. Genauso habe ich daf&uuml;r Sorge
  + getragen, da&szlig; sowohl Eingabe- als auch Ausgabedateien festgelegt werden k&ouml;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&uuml;r
  + die <parameter>-p</parameter>-Option in dem h&ouml;chsten Bit von
  + <varname role="register">EDX</varname>. Ein kurzer Abgleich des Zeichens wird
  + uns also eine schnelle Entscheidung dar&uuml;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

search this site