<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>romeofox blog</title>
	<atom:link href="http://romeofox.de/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://romeofox.de/wp</link>
	<description>Tipps &#38; Tricks zu Linux, Webentwicklung und mehr.</description>
	<lastBuildDate>Wed, 11 Jan 2012 11:29:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>diff aus 2x STDOUT</title>
		<link>http://romeofox.de/wp/2012/01/11/diff-aus-2x-stdout/</link>
		<comments>http://romeofox.de/wp/2012/01/11/diff-aus-2x-stdout/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 11:28:23 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=356</guid>
		<description><![CDATA[Man kann bei diff normalerweise nur einen der beiden Datei-Parameter durch ein &#8220;-&#8221; ersetzen, um diese Daten vom Standard-Input zu lesen. Was aber, wenn man die Ausgaben von zwei Programmen vergleichen und man diese nicht in Dateien zwischenspeichern will? Bei commandlinefu.com fand ich die Lösung: diff &#60;( cmd1 ) &#60;( cmd2 ) Man kann also [...]]]></description>
			<content:encoded><![CDATA[<p>Man kann bei <code>diff</code> normalerweise nur einen der beiden Datei-Parameter durch ein &#8220;-&#8221; ersetzen, um diese Daten vom Standard-Input zu lesen. Was aber, wenn man die Ausgaben von zwei Programmen vergleichen und man diese nicht in Dateien zwischenspeichern will?</p>
<p>Bei <a href="http://www.commandlinefu.com/commands/view/3060/diff-will-usually-only-take-one-file-from-stdin.-this-is-a-method-to-take-the-result-of-two-streams-and-compare-with-diff.-the-example-i-use-to-compare-two-itunes-libraries-but-it-is-generally-applicable.">commandlinefu.com</a> fand ich die Lösung:</p>
<pre class="codeBox">diff &lt;( cmd1 ) &lt;( cmd2 )</pre>
<p>Man kann also prima die Ausgabe von zwei Greps auf ps vergleichen, um die User zu finden, bei denen ein Programm nicht gestartet ist:</p>
<pre class="codeBox">diff &lt;( ps -ef | grep  'bin/anel' | sort | cut -c 1-8 ) \
  &lt;( ps -ef | grep 'script/start_aws' | sort | cut -c 1-8 )</pre>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2012/01/11/diff-aus-2x-stdout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skip der ersten Zeile wenn leer</title>
		<link>http://romeofox.de/wp/2011/12/21/skip-der-ersten-zeile-wenn-leer/</link>
		<comments>http://romeofox.de/wp/2011/12/21/skip-der-ersten-zeile-wenn-leer/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 14:29:29 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=351</guid>
		<description><![CDATA[Heute hatte ich das Problem, eine leere Ausgabe des Programms &#8220;zip&#8221; zu unterdrücken, damit Cron mir keine Mail schickt, wenn es nichts zu zippen gibt. Findet zip nichts, was es einpacken kann, bekommt man die folgende Meldung: /usr/bin/zip -r /tmp/test.zip . -t `date -d "-1 days" +%Y-%m-%d` -i "*/bearbeitet/*" zip error: Nothing to do! (/tmp/test.zip) [...]]]></description>
			<content:encoded><![CDATA[<p>Heute hatte ich das Problem, eine leere Ausgabe des Programms &#8220;zip&#8221; zu unterdrücken, damit Cron mir keine Mail schickt, wenn es nichts zu zippen gibt.</p>
<p>Findet zip nichts, was es einpacken kann, bekommt man die folgende Meldung:</p>
<pre class="codeBox">/usr/bin/zip -r /tmp/test.zip . -t `date -d "-1 days" +%Y-%m-%d` -i "*/bearbeitet/*"

zip error: Nothing to do! (/tmp/test.zip)</pre>
<p>Die Zeile mit &#8220;Nothing to do!&#8221; lässt sich ja noch einfach mit einem grep unterdrücken, aber wie werde ich die Leerzeile davor los? Ein</p>
<pre class="codeBox">| tail +2</pre>
<p>bewirkt zwar, dass die Ausgabe erst ab der zweiten Zeile erfolgt &#8211; leider auch dann, wenn zip etwas zu tun bekommt. Also muss perl ran:</p>
<pre class="codeBox">more testdaten | perl -n -e 'print $_ unless ( $. == 1 &amp;&amp; /^$/ )'</pre>
<p>Dies unterdrückt die erste Zeile nur, wenn sie leer ist, wobei weitere Leerzeilen nicht ausgefiltert werden.</p>
<p>Der ganze Aufruf sieht dann so aus:</p>
<pre class="codeBox">/usr/bin/zip -r /tmp/test.zip . -t `date -d "-1 days" +%Y-%m-%d` -i "*/bearbeitet/*" 2&gt;&amp;1 | \
  perl -n -e 'print $_ unless /zip error: Nothing to do/ || ( $. == 1 &amp;&amp; /^$/ )'</pre>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2011/12/21/skip-der-ersten-zeile-wenn-leer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Login und Befehlseingaben an telnet pipen</title>
		<link>http://romeofox.de/wp/2011/12/05/login-und-befehlseingaben-an-telnet-pipen/</link>
		<comments>http://romeofox.de/wp/2011/12/05/login-und-befehlseingaben-an-telnet-pipen/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 13:57:08 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=344</guid>
		<description><![CDATA[Durch eine Meldung von Command Line Magic  bin ich dahinter gekommen, wie man Befehlseingaben per Pipe an telnet überträgt. Damit gelingt sogar ein Login. (sleep 3;echo user1;sleep 1;echo geheimnis;sleep 1;echo "ls -l";sleep 5)&#124;telnet 192.168.0.1 Das ist recht nützlich für Scripte, wenn das Gegenüber kein ssh kann.]]></description>
			<content:encoded><![CDATA[<p>Durch eine Meldung von <a title="climagic" href="https://identi.ca/notice/86173171">Command Line Magic</a>  bin ich dahinter gekommen, wie man Befehlseingaben per Pipe an telnet überträgt. Damit gelingt sogar ein Login.</p>
<pre class="codeBox">(sleep 3;echo user1;sleep 1;echo geheimnis;sleep 1;echo "ls -l";sleep 5)|telnet 192.168.0.1</pre>
<p>Das ist recht nützlich für Scripte, wenn das Gegenüber kein ssh kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2011/12/05/login-und-befehlseingaben-an-telnet-pipen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Netzwerkpasswort löschen/ändern</title>
		<link>http://romeofox.de/wp/2011/10/13/windows-netzwerkpasswort-loschenandern/</link>
		<comments>http://romeofox.de/wp/2011/10/13/windows-netzwerkpasswort-loschenandern/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:00:55 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Drucker]]></category>
		<category><![CDATA[Freigabe]]></category>
		<category><![CDATA[Passwort]]></category>
		<category><![CDATA[Sicherheit]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=334</guid>
		<description><![CDATA[Hat man z.B. einen Netzwerkdrucker auf seinem Windows-Rechner eingebunden und ändert sich das Passwort für diese Verbindung, kann man auf den Drucker nicht mehr zugreifen. Bislang musste ich dann den Drucker immer löschen und wieder neu einrichten, was natürlich ziemlich lästig ist, wenn die IT-Abteilung einen zwingt, alle 21 Tage das Passwort zu ändern. Nun [...]]]></description>
			<content:encoded><![CDATA[<p>Hat man z.B. einen Netzwerkdrucker auf seinem Windows-Rechner eingebunden und ändert sich das Passwort für diese Verbindung, kann man auf den Drucker nicht mehr zugreifen. Bislang musste ich dann den Drucker immer löschen und wieder neu einrichten, was natürlich ziemlich lästig ist, wenn die IT-Abteilung einen zwingt, alle 21 Tage das Passwort zu ändern. Nun habe ich aber in dem Beitrag „<a href="http://www.intelligensbestien.de/2008/08/24/windows-netzwerkpasswort-loschenandern/">Windows Netzwerkpasswort löschen/ändern</a>“ auf <a href="http://www.intelligensbestien.de">intelligensbestien.de</a> die Lösung gefunden: Start -&gt; Ausführen -&gt; „control userpasswords2“  -&gt; Reiter „Erweitert“ -&gt; „Kennwörter verwalten“.</p>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2011/10/13/windows-netzwerkpasswort-loschenandern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passwörter sicher in Webanwendungen speichern</title>
		<link>http://romeofox.de/wp/2011/07/15/passworter-sicher-in-webanwendungen-speichern/</link>
		<comments>http://romeofox.de/wp/2011/07/15/passworter-sicher-in-webanwendungen-speichern/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 13:23:40 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Passwort]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Webanwendungen]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=328</guid>
		<description><![CDATA[Im Artikel „Cracker-Bremse“ auf heise.de ist sehr gut erklärt, wie man es in eigenen Webanwendungen anstellt, die Passwörter der User sicher zu speichern. Inklusive Hintergründe und Einführung in Phpass (auf Seite 4).]]></description>
			<content:encoded><![CDATA[<p>Im Artikel „<a href="http://heise.de/-1253931">Cracker-Bremse</a>“ auf <a href="http://www.heise.de">heise.de</a> ist sehr gut erklärt, wie man es in eigenen Webanwendungen anstellt, die Passwörter der User sicher zu speichern. Inklusive Hintergründe und Einführung in <a href="http://www.openwall.com/phpass/">Phpass</a> (auf Seite 4).</p>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2011/07/15/passworter-sicher-in-webanwendungen-speichern/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>STDERROR in eine Variable umleiten</title>
		<link>http://romeofox.de/wp/2011/02/03/stderror-in-eine-variable-umleiten/</link>
		<comments>http://romeofox.de/wp/2011/02/03/stderror-in-eine-variable-umleiten/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 10:19:26 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Fehlerausgabe]]></category>
		<category><![CDATA[Fehlermeldung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[STDERR]]></category>
		<category><![CDATA[STDOUT]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=319</guid>
		<description><![CDATA[Kann man die Fehlerausgabe eines Befehls in einer Variablen speichern und die Standardausgabe trotzdem weiterverarbeiten? Ja, man kann.]]></description>
			<content:encoded><![CDATA[<p>In einem Script verkette ich mehrere Befehle, was aber den Nachteil hat, dass sich für die Fehlerbehandlung nur der Exit-Wert des äußeren Befehls auswerten lässt. Hier die Zeile, um die es geht:</p>
<pre class="codeBox">sudo -u backup ssh root@${RECHNER} "~/sbin/do_SSHbackup" &gt; $BACKUPDIR/${RECHNER%%.*}/${AKTDATE}.tgz || OK=NOK</pre>
<p>Hier wird die Variable OK nur auf NOK gesetzt, wenn z.B. <code>sudo</code> fehlschlägt oder das Zielverzeichnis nicht existiert. Wirft jedoch das per SSH aufgerufene Script do_SSHbackup einen Fehler, so bekommt die Variable OK nichts davon mit. Auf dem Standardfehlerkanal landet jedoch eine Fehlermeldung.</p>
<p>Wenn ich nun die Ausgabe der Fehlermeldungen in einer Variablen sammeln und diese auswerten könnte, wäre ein Abfangen des Fehlers möglich. Aber wie, ohne dabei den Standardausgabekanal zu beeinflussen? Nach ein wenig „Googleei“ fand ich die Lösung bei <a href="http://stackoverflow.com/questions/962255/redirecting-stderr-to-a-variable-in-a-bash-script#962306" target="_blank">stackoverflow.com</a>.</p>
<pre class="codeBox">OUTPUT=$( { sudo -u backup ssh root@${RECHNER} "~/sbin/do_SSHbackup" &gt; $BACKUPDIR/${RECHNER%%.*}/${AKTDATE}.tgz; } 2&gt;&amp;1 ) || OK=NOK</pre>
<p>Somit bekomme ich alle Fehlermeldungen in die Variable OUTPUT, welche ich im Nachgang auswerten kann:</p>
<pre class="codeBox">if [ "$OK" != "OK" -o -n "$OUTPUT" ] ; then
  echo "$OUTPUT"&gt;&amp;2
  ...
fi</pre>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2011/02/03/stderror-in-eine-variable-umleiten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe-Reader Installationsdateien</title>
		<link>http://romeofox.de/wp/2010/12/01/adobe-reader-installationsdateien/</link>
		<comments>http://romeofox.de/wp/2010/12/01/adobe-reader-installationsdateien/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 10:51:34 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Acrobat]]></category>
		<category><![CDATA[Adobe-Reader]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=314</guid>
		<description><![CDATA[Die Links zur Installation des (Acrobat) Adobe Reader, die man so im Netz findet, führen alle zur Adobe-Seite und dort zu einem Installer, der die eigentliche Installation aus dem Netz nach lädt. Das nützt einem aber nichts, wenn man den Reader auf einem Rechner installieren will, der gar keinen Zugang zum Internet hat. Aber bei [...]]]></description>
			<content:encoded><![CDATA[<p>Die Links zur Installation des (Acrobat) Adobe Reader, die man so im Netz findet, führen alle zur Adobe-Seite und dort zu einem Installer, der die eigentliche Installation aus dem Netz nach lädt. Das nützt einem aber nichts, wenn man den Reader auf einem Rechner installieren will, der gar keinen Zugang zum Internet hat.</p>
<p>Aber bei <a href="http://www.chip.de/downloads/Adobe-Reader_12998358.html">chip.de</a> findet sich in den Kommentaren der Hinweis auf <a href="ftp://ftp.adobe.com/pub/adobe/reader/win/">ftp://ftp.adobe.com/pub/adobe/reader/win/</a>. Hier gibt es aktuelle und ältere Versionen des Windows-Installers zum Download. Installer für andere Betriebssysteme (z.B. Linux, Mac) findet man unter <a href="ftp://ftp.adobe.com/pub/adobe/reader/">ftp://ftp.adobe.com/pub/adobe/reader/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2010/12/01/adobe-reader-installationsdateien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>krdc: RDP mit Domänen-Angabe</title>
		<link>http://romeofox.de/wp/2010/11/30/krdc-rdp-mit-domanen-angabe/</link>
		<comments>http://romeofox.de/wp/2010/11/30/krdc-rdp-mit-domanen-angabe/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 16:32:02 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Domäne]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[krdc]]></category>
		<category><![CDATA[rdesktop]]></category>
		<category><![CDATA[RDP]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=309</guid>
		<description><![CDATA[Bei KDE gibt es ja auch krdc, den &#8220;Verbindungsclient zu Fremdrechner&#8221;, mit dem man sich wunderbar per Remote-Desktop-Protokoll (RDP) auf Windows-Rechner verbinden kann. Ich nutze das täglich, u.a. wegen des guten Vollbild-Modus. Der ist nämlich beim Kommandozeilen-Tool rdesktop leider nicht so gut. Dafür hat rdesktop eine Option -d, mit der man die Windows-Domäne angeben kann. [...]]]></description>
			<content:encoded><![CDATA[<p>Bei KDE gibt es ja auch <code>krdc</code>, den &#8220;Verbindungsclient zu Fremdrechner&#8221;, mit dem man sich wunderbar per Remote-Desktop-Protokoll (RDP) auf Windows-Rechner verbinden kann. Ich nutze das täglich, u.a. wegen des guten Vollbild-Modus. Der ist nämlich beim Kommandozeilen-Tool <code>rdesktop</code> leider nicht so gut. Dafür hat rdesktop eine Option <code>-d</code>, mit der man die Windows-Domäne angeben kann.</p>
<p>Aber man kann das auch mit krdc erreichen in dem man die Domäne vor den Benutzernamen stellt und beide Teile durch zwei Backslashs trennt:</p>
<pre class="codeBox">krdc --fullscreen rdp://Domaene\\klaus.meier@192.168.1.2</pre>
<p>Will man das in einem Desktop-Icon eintragen, so muss man die beiden Backslashs verdoppeln, hat dann also vier davon:</p>
<pre class="codeBox">Exec=krdc --fullscreen rdp://Domaene\\\\klaus.meier@192.168.1.2</pre>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2010/11/30/krdc-rdp-mit-domanen-angabe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webtool: Browsergröße ändern</title>
		<link>http://romeofox.de/wp/2010/08/03/webtool-browsergrose-andern/</link>
		<comments>http://romeofox.de/wp/2010/08/03/webtool-browsergrose-andern/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 08:44:51 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet-Explorer]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=292</guid>
		<description><![CDATA[Ich bin heute über einen Link gestolpert, mit dem man mal eben das Browserfenster auf verschiedene Größen einstellen kann: resizeMyBrowser. Gut, das kann der Webdeveloper-Toolbar auch, aber der o.g. hat diverse Größen für mobile Geräte parat und funktioniert – ohne eine Installation – auf verschiedenen Browsern1. Das ist nicht ganz unwichtig, wenn man das mal [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin heute über einen Link gestolpert, mit dem man mal eben das Browserfenster auf verschiedene Größen einstellen kann: <a href="http://resizemybrowser.com/">resizeMyBrowser</a>.</p>
<p>Gut, das kann der Webdeveloper-Toolbar auch, aber der o.g. hat diverse Größen für mobile Geräte parat und funktioniert – ohne eine Installation – auf verschiedenen Browsern<sup class='footnote'><a href='#fn-292-1' id='fnref-292-1'>1</a></sup>. Das ist nicht ganz unwichtig, wenn man das mal nicht auf seinem eigenen Rechner nutzen will, um jemanden etwas vorzuführen.</p>
<p>Einzig die Einstellung &#8220;Maximum&#8221; funktioniert nicht ganz zufriedenstellend. Hier öffnet sich &#8211; je nach Einstellung des Popup-Blockers &#8211; ein neues Browserfenster.</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-292-1'>Getestet habe ich Firefox 3.6, IE6 &#8211; 8, Safari 5 (Win), Konqueror 4.1.3 <span class='footnotereverse'><a href='#fnref-292-1'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2010/08/03/webtool-browsergrose-andern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl: Einen Hash aus einer Datei befüllen</title>
		<link>http://romeofox.de/wp/2010/07/23/perl-einen-hash-aus-einer-datei-befullen/</link>
		<comments>http://romeofox.de/wp/2010/07/23/perl-einen-hash-aus-einer-datei-befullen/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 10:22:21 +0000</pubDate>
		<dc:creator>romeofox</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Hash]]></category>

		<guid isPermaLink="false">http://romeofox.de/wp/?p=286</guid>
		<description><![CDATA[Manchmal muss man eine Liste aus einer Datei einlesen, weil man nach Elementen aus dieser Liste suchen möchte. Hier bietet es sich an, die Daten in einen Hash einzulesen. Und das geht erfreulich einfach mit: open LIST, '&#60;', $nodefile or die "Cannot open '$nodefile' $!"; my %nodelist = map /^([^;]+)\s*;\s*(.+)\s*$/, &#60;LIST&#62;; close LIST; Man öffnet [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal muss man eine Liste aus einer Datei einlesen, weil man nach Elementen aus dieser Liste suchen möchte. Hier bietet es sich an, die Daten in einen Hash einzulesen. Und das geht erfreulich einfach mit:</p>
<pre>
<pre class="codeBox">open LIST, '&lt;', $nodefile or die "Cannot open '$nodefile' $!";
my %nodelist = map /^([^;]+)\s*;\s*(.+)\s*$/, &lt;LIST&gt;;
close LIST;
</pre>
</pre>
<p>Man öffnet die Datei zum Lesen und <a href="http://perldoc.perl.org/functions/map.html">map</a> macht den Rest. In der Datei sind die Werte durch ein Semikolon getrennt (CSV-Datei). Hat man ein Gleichheitszeichen als Trenner, dann sieht die Zeile so aus:</p>
<pre>
<pre>my %nodelist = map /^([^=]+)\s*=\s*(.+)\s*$/, &lt;LIST&gt;;</pre>
</pre>
<p>Hier das Ganze als komplettes Perl-Skript:</p>
<pre class="codeBox">#!/usr/bin/perl
use warnings;
use strict;
use Getopt::Std;

my $nodefile;
my %option;
my $usage = "USAGE: $0 -N filename\n";

unless(getopts("N:", \%option)) {
 die "$usage";
}
if(defined $option{N}) {
 $nodefile = $option{N};
} else {
 die "$usage";
}

open LIST, '&lt;', $nodefile or die "Cannot open '$nodefile' $!";

my %nodelist = map /^([^;]+)\s*;\s*(.+)\s*$/, &lt;LIST&gt;;

close LIST;

for my $entry ( sort keys %nodelist ) {
 print "$entry: $nodelist{$entry}\n";
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://romeofox.de/wp/2010/07/23/perl-einen-hash-aus-einer-datei-befullen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

