<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>Tellingmachine</title>
    <description>Vom Hundertsten ins Tausendste</description>
    <link>http://www.tellingmachine.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.tellingmachine.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.tellingmachine.com/syndication.axd</blogChannel:blink>
    <dc:creator>Klaus Graefensteiner</dc:creator>
    <dc:title>Tellingmachine</dc:title>
    <geo:lat>33.610000</geo:lat>
    <geo:long>-117.690000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Tellingmachine" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Using PowerShell Filter functions to convert weather comma separated datasets from the US to the metric system</title>
      <description>&lt;p&gt;This is another interesting application of PowerShell filter functions. The input for this filter is a comma separated line of text representing US system floating point values like Temperature, Pressure, Wind Speed. The output of this filter is a comma separated string of floating point values converted to the metric system.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Wetterstation%20Zugspitze_2.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Wetterstation Zugspitze" border="0" alt="Wetterstation Zugspitze" src="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Wetterstation%20Zugspitze_thumb.jpg" width="644" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure 1: Weather Station on top of mount Zugspitze&lt;/strong&gt;&lt;/p&gt; &lt;div id="tocautogen"&gt;&lt;ul class="xoxo"&gt;&lt;li&gt;&lt;a href="#toc_0"&gt;The Problem&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#toc_1"&gt;The Solution&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="#toc_2"&gt;PowerShell script&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="#toc_3"&gt;Combi-Filter with explicit expressions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#toc_4"&gt;Combi-Filter with array of FilterInfo objects&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#toc_5"&gt;Download&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#toc_6"&gt;Ausblick&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;   &lt;span id="toc_0"&gt;&lt;/span&gt;&lt;h3&gt;The Problem&lt;/h3&gt;  &lt;p&gt;I wanted to convert weather data in a CSV file that are stored in the US system into a file that stores the equivalent values in the metric system. Here is how the file looks in Excel before the conversion:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Excel%20With%20US%20Weather%20Data.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Excel With US Weather Data" border="0" alt="Excel With US Weather Data" src="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Excel%20With%20US%20Weather%20Data_thumb.jpg" width="644" height="264" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure 2: Weather data in the US system&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;And here is how the file should look like after the conversion:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Excel%20With%20Metric%20Weather%20Data.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Excel With Metric Weather Data" border="0" alt="Excel With Metric Weather Data" src="http://www.tellingmachine.com/image.axd?picture=WindowsLiveWriter/UsingPowerShellFilterfunctionstoconvertw_C6FF/Excel%20With%20Metric%20Weather%20Data_thumb.jpg" width="644" height="263" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure 3: Weather data in the metric system&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Temperatures needed to be converted from degrees Fahrenheit to Celsius, the pressure expressed in HPa (Hecto Pascal) instead of Inch Mercury, speeds converted from MPH to Km/h and finally mm (Millimeters) used instead of Inches. The formulae for these conversions can be found here for example: &lt;a title="http://www.srh.noaa.gov/elp/wxcalc/wxcalc.shtml" href="http://www.srh.noaa.gov/elp/wxcalc/wxcalc.shtml"&gt;http://www.srh.noaa.gov/elp/wxcalc/wxcalc.shtml&lt;/a&gt;.&lt;/p&gt;  &lt;span id="toc_1"&gt;&lt;/span&gt;&lt;h3&gt;The Solution&lt;/h3&gt;  &lt;p&gt;The solution is actually fairly simple. I was using Get-Content and Add-Content to read and write the weather records as lines of text. Then I was piping the strings through a Combi-Filter. A Combi-Filter is a PowerShell Filter function that uses several specialized Filter function itself in its implementation.&lt;/p&gt;  &lt;span id="toc_2"&gt;&lt;/span&gt;&lt;h4&gt;PowerShell script&lt;/h4&gt;  &lt;p&gt;Here is the PowerShell script that shows the basic approach.&lt;/p&gt;  &lt;span id="toc_3"&gt;&lt;/span&gt;&lt;h5&gt;Combi-Filter with explicit expressions&lt;/h5&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; Filter FormatTime()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;     [System.Globalization.CultureInfo] $provider = [System.Globalization.CultureInfo]::InvariantCulture;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   4:&lt;/span&gt;     [DateTime] $dt = [DateTime]::ParseExact($_, &lt;span class="str"&gt;&amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;&lt;/span&gt;, $provider)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;     $DateTimeString = $dt.ToString()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   6:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $DateTimeString&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   9:&lt;/span&gt; Filter FToC()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  10:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](($_ - 32) * 5/9)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  14:&lt;/span&gt; Filter InHgToHPa()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  15:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  16:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](33.8639 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  18:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  19:&lt;/span&gt; Filter NOP()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  20:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  21:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $_&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  22:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  23:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  24:&lt;/span&gt; Filter MPHToKmPH()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  25:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  26:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](1.609344 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  27:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  29:&lt;/span&gt; Filter InToMm()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  30:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  31:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](25.4 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  32:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  33:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  34:&lt;/span&gt; $Records = &lt;span class="str"&gt;&amp;quot;Time,TemperatureC,DewpointC,PressureHPa,WindDirectionDegrees,WindSpeedKmH,WindSpeedGustKmH,Humidity,HourlyPrecipMm&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  35:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:03:00,49.6,29.7,30.10,5,1,7,46,0.00&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  36:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:08:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  37:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:12:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  38:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:17:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  39:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:22:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  40:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:27:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  41:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:32:00,49.2,30.4,30.10,300,3,4,48,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  42:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:37:00,49.0,30.7,30.10,328,3,12,49,0.00&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  43:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  44:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  45:&lt;/span&gt; Filter Filter-Header&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  46:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  47:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt;($_ &lt;span class="preproc"&gt;-match&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;^Time&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  48:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  49:&lt;/span&gt;         $_ | out-null&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  50:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  51:&lt;/span&gt;     &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  52:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  53:&lt;/span&gt;         $_&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  54:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  55:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  56:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  57:&lt;/span&gt; &lt;span class="rem"&gt;# Combi-Filter with explicit expressions&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  58:&lt;/span&gt; Filter Filter-USToMetric($d=&lt;span class="str"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  59:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  60:&lt;/span&gt;     $Fields = $_.Split($d)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  61:&lt;/span&gt;    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  62:&lt;/span&gt;     $Fields[0] = $Fields[0] | FormatTime&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  63:&lt;/span&gt;     $Fields[1] = $Fields[1] | FToC    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  64:&lt;/span&gt;     $Fields[2] = $Fields[2] | FToC &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  65:&lt;/span&gt;     $Fields[3] = $Fields[3] | InHgToHPa    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  66:&lt;/span&gt;     $Fields[4] = $Fields[4] | NOP&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  67:&lt;/span&gt;     $Fields[5] = $Fields[5] | MPHToKmPH    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  68:&lt;/span&gt;     $Fields[6] = $Fields[6] | MPHToKmPH &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  69:&lt;/span&gt;     $Fields[7] = $Fields[7] | NOP &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  70:&lt;/span&gt;     $Fields[8] = $Fields[8] | InToMm&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  71:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  72:&lt;/span&gt;     $Record = [String]::Join($d, $Fields)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  73:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $Record&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  74:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  75:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  76:&lt;/span&gt; $Results = $Records | Filter-Header | Filter-USToMetric&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  77:&lt;/span&gt; $Results&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  78:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  79:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;div class="CopyToClipboard" style=""&gt;&lt;div&gt;&lt;a href="javascript:void(0);" onclick="CopyToClipboard_ViewPlain(copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_4085);"&gt;View Plain&lt;/a&gt; | &lt;a href="javascript:void(0);" onclick="CopyToClipboard_Copy(copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_4085);"&gt;Copy To Clipboard&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
				&lt;div id="CopyToClipboard_Hidden" style="display:none;"&gt;&lt;/div&gt;
				&lt;div id="CopyToClipboard_FlashContainer"&gt;&lt;/div&gt;
                &lt;script type="text/javascript"&gt;

					function CopyToClipboard_Strip( text ){
						text = text.replace( /&amp;nbsp;/g, ' ' );
						text = text.replace( /&amp;quot;/g, '"' );
						text = text.replace( /&amp;#39;/g, '"' );
						text = text.replace( /&amp;amp;/g, '&amp;' );
						text = text.replace( /&amp;lt;/g, String.fromCharCode(60) );
						text = text.replace( /&amp;gt;/g, String.fromCharCode(62) );
						return text;
					}

                    function CopyToClipboard_Copy( text ){

						//### get reference to utility div
						var ele = document.getElementById('CopyToClipboard_Hidden');

						//### the following taken from: http://webchicanery.com/2006/11/14/clipboard-copy-javascript/
						if (false &amp;&amp; window.clipboardData) {
							window.clipboardData.setData( "Text", text );
						} else {
							document.getElementById('CopyToClipboard_FlashContainer').innerHTML = '';
							var divinfo = '&lt;embed id="CopyToClipboard_FlashFile" src="/themes/Vanilla/_clipboard.swf" FlashVars="clipboard=' + encodeURIComponent(text) + '" width="0" height="0" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;';
							document.getElementById('CopyToClipboard_FlashContainer').innerHTML = divinfo;
						}

                    }

					function CopyToClipboard_ViewPlain( text ){
						var win = window.open( '', 'CopyToClipboard_Window', 'width=480, height=480, toolbar=no, menubar=no, scrollbars=auto, resizable=yes, location=no, directories=no, status=no' );
						win.document.write( '&lt;html&gt;&lt;head&gt;&lt;title&gt;Code&lt;/title&gt;&lt;body style="margin:0;padding:0;"&gt;&lt;textarea style="width:100%;height:100%;border:0;"&gt;' + text + '&lt;/textarea&gt;&lt;/body&gt;&lt;/html&gt;' );
					}

                &lt;/script&gt;
            
					&lt;script type="text/javascript"&gt;
						var copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_4085 = CopyToClipboard_Strip('Filter FormatTime()\r\n{\r\n    [System.Globalization.CultureInfo] $provider = [System.Globalization.CultureInfo]::InvariantCulture;\r\n    [DateTime] $dt = [DateTime]::ParseExact($_, &amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;, $provider)\r\n    $DateTimeString = $dt.ToString()\r\n    return $DateTimeString\r\n}\r\n\r\nFilter FToC()\r\n{\r\n    return [Double](($_ - 32) * 5/9)\r\n}\r\n\r\nFilter InHgToHPa()\r\n{\r\n    return [Double](33.8639 * $_)\r\n}\r\n\r\nFilter NOP()\r\n{\r\n    return $_\r\n}\r\n\r\nFilter MPHToKmPH()\r\n{\r\n    return [Double](1.609344 * $_)\r\n}\r\n\r\nFilter InToMm()\r\n{\r\n    return [Double](25.4 * $_)\r\n}\r\n\r\n$Records = &amp;quot;Time,TemperatureC,DewpointC,PressureHPa,WindDirectionDegrees,WindSpeedKmH,WindSpeedGustKmH,Humidity,HourlyPrecipMm&amp;quot;,\r\n            &amp;quot;2008-01-01 00:03:00,49.6,29.7,30.10,5,1,7,46,0.00&amp;quot;, \r\n            &amp;quot;2008-01-01 00:08:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:12:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:17:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:22:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:27:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:32:00,49.2,30.4,30.10,300,3,4,48,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:37:00,49.0,30.7,30.10,328,3,12,49,0.00&amp;quot;\r\nFilter Filter-Header\r\n{\r\n    if($_ -match &amp;quot;^Time&amp;quot;)\r\n    {\r\n        $_ | out-null\r\n    }\r\n    else\r\n    {\r\n        $_\r\n    }\r\n}\r\n\r\n# Combi-Filter with explicit expressions\r\nFilter Filter-USToMetric($d=&amp;quot;,&amp;quot;)\r\n{\r\n    $Fields = $_.Split($d)\r\n   \r\n    $Fields[0] = $Fields[0] | FormatTime\r\n    $Fields[1] = $Fields[1] | FToC    \r\n    $Fields[2] = $Fields[2] | FToC \r\n    $Fields[3] = $Fields[3] | InHgToHPa    \r\n    $Fields[4] = $Fields[4] | NOP\r\n    $Fields[5] = $Fields[5] | MPHToKmPH    \r\n    $Fields[6] = $Fields[6] | MPHToKmPH \r\n    $Fields[7] = $Fields[7] | NOP \r\n    $Fields[8] = $Fields[8] | InToMm\r\n    \r\n    $Record = [String]::Join($d, $Fields)\r\n    return $Record\r\n}\r\n\r\n$Results = $Records | Filter-Header | Filter-USToMetric\r\n$Results\r\n\r\n');
					&lt;/script&gt;

&lt;span id="toc_4"&gt;&lt;/span&gt;&lt;h5&gt;Combi-Filter with array of FilterInfo objects&lt;/h5&gt;

&lt;p&gt;After my initial implementation I was not quite happy with the way the different conversion Filter functions needed to be applied for the different fields. With the help from &lt;a href="http://nivot.org/" target="_blank"&gt;Oisin Grehan&lt;/a&gt; I was able to find a more elegant way to call the appropriate filter function.&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; Filter FormatTime()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;     [System.Globalization.CultureInfo] $provider = [System.Globalization.CultureInfo]::InvariantCulture;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   4:&lt;/span&gt;     [DateTime] $dt = [DateTime]::ParseExact($_, &lt;span class="str"&gt;&amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;&lt;/span&gt;, $provider)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;     $DateTimeString = $dt.ToString()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   6:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $DateTimeString&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   9:&lt;/span&gt; Filter FToC()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  10:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](($_ - 32) * 5/9)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  14:&lt;/span&gt; Filter InHgToHPa()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  15:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  16:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](33.8639 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  18:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  19:&lt;/span&gt; Filter NOP()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  20:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  21:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $_&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  22:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  23:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  24:&lt;/span&gt; Filter MPHToKmPH()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  25:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  26:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](1.609344 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  27:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  29:&lt;/span&gt; Filter InToMm()&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  30:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  31:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; [Double](25.4 * $_)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  32:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  33:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  34:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  35:&lt;/span&gt; &lt;span class="rem"&gt;#For Loop doesn't work&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  36:&lt;/span&gt; $ConversionTable = @(&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  37:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:FormatTime),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  38:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:FToC),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  39:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:FToC),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  40:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:InHgToHPa),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  41:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:NOP),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  42:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:MPHToKmPH),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  43:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:MPHToKmPH),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  44:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:NOP),&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  45:&lt;/span&gt;                         (get-item &lt;span class="kwrd"&gt;function&lt;/span&gt;:InToMm)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  46:&lt;/span&gt;                     )&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  47:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  48:&lt;/span&gt; $ConversionTable&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  49:&lt;/span&gt; $ConversionTable[0].GetType().FullName&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  50:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  51:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  52:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  53:&lt;/span&gt; $Records = &lt;span class="str"&gt;&amp;quot;Time,TemperatureC,DewpointC,PressureHPa,WindDirectionDegrees,WindSpeedKmH,WindSpeedGustKmH,Humidity,HourlyPrecipMm&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  54:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:03:00,49.6,29.7,30.10,5,1,7,46,0.00&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  55:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:08:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  56:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:12:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  57:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:17:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  58:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:22:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  59:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:27:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  60:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:32:00,49.2,30.4,30.10,300,3,4,48,0.00&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  61:&lt;/span&gt;             &lt;span class="str"&gt;&amp;quot;2008-01-01 00:37:00,49.0,30.7,30.10,328,3,12,49,0.00&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  62:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  63:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  64:&lt;/span&gt; Filter Filter-Header&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  65:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  66:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt;($_ &lt;span class="preproc"&gt;-match&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;^Time&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  67:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  68:&lt;/span&gt;         $_ | out-null&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  69:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  70:&lt;/span&gt;     &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  71:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  72:&lt;/span&gt;         $_&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  73:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  74:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  75:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  76:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  77:&lt;/span&gt; &lt;span class="rem"&gt;#Combi-Filter using array of FilterInfo objects&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  78:&lt;/span&gt; Filter Filter-USToMetricA($d=&lt;span class="str"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  79:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  80:&lt;/span&gt;     $Fields = $_.Split($d)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  81:&lt;/span&gt;    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  82:&lt;/span&gt;     &lt;span class="kwrd"&gt;for&lt;/span&gt; ($i = 0; $i &lt;span class="preproc"&gt;-lt&lt;/span&gt; 9; $i++)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  83:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  84:&lt;/span&gt;         $Fields[$i] = $Fields[$i] | &amp;amp;$ConversionTable[$i]&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  85:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  86:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  87:&lt;/span&gt;     $Record = [String]::Join($d, $Fields)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  88:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; $Record&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  89:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  90:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  91:&lt;/span&gt; $Results = $Records | Filter-Header | Filter-USToMetricA&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  92:&lt;/span&gt; $Results&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  93:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;div class="CopyToClipboard" style=""&gt;&lt;div&gt;&lt;a href="javascript:void(0);" onclick="CopyToClipboard_ViewPlain(copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_17041);"&gt;View Plain&lt;/a&gt; | &lt;a href="javascript:void(0);" onclick="CopyToClipboard_Copy(copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_17041);"&gt;Copy To Clipboard&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
					&lt;script type="text/javascript"&gt;
						var copyToClipboardb9ddda031b3a4827ae6d8c2e701de758_17041 = CopyToClipboard_Strip('Filter FormatTime()\r\n{\r\n    [System.Globalization.CultureInfo] $provider = [System.Globalization.CultureInfo]::InvariantCulture;\r\n    [DateTime] $dt = [DateTime]::ParseExact($_, &amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;, $provider)\r\n    $DateTimeString = $dt.ToString()\r\n    return $DateTimeString\r\n}\r\n\r\nFilter FToC()\r\n{\r\n    return [Double](($_ - 32) * 5/9)\r\n}\r\n\r\nFilter InHgToHPa()\r\n{\r\n    return [Double](33.8639 * $_)\r\n}\r\n\r\nFilter NOP()\r\n{\r\n    return $_\r\n}\r\n\r\nFilter MPHToKmPH()\r\n{\r\n    return [Double](1.609344 * $_)\r\n}\r\n\r\nFilter InToMm()\r\n{\r\n    return [Double](25.4 * $_)\r\n}\r\n#For Loop doesn\'t work\r\n$ConversionTable = @(\r\n                        (get-item function:FormatTime),\r\n                        (get-item function:FToC),\r\n                        (get-item function:FToC),\r\n                        (get-item function:InHgToHPa),\r\n                        (get-item function:NOP),\r\n                        (get-item function:MPHToKmPH),\r\n                        (get-item function:MPHToKmPH),\r\n                        (get-item function:NOP),\r\n                        (get-item function:InToMm)\r\n                    )\r\n\r\n$ConversionTable\r\n$ConversionTable[0].GetType().FullName\r\n\r\n$Records = &amp;quot;Time,TemperatureC,DewpointC,PressureHPa,WindDirectionDegrees,WindSpeedKmH,WindSpeedGustKmH,Humidity,HourlyPrecipMm&amp;quot;,\r\n            &amp;quot;2008-01-01 00:03:00,49.6,29.7,30.10,5,1,7,46,0.00&amp;quot;, \r\n            &amp;quot;2008-01-01 00:08:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:12:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:17:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:22:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:27:00,49.5,29.6,30.10,68,3,3,46,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:32:00,49.2,30.4,30.10,300,3,4,48,0.00&amp;quot;,\r\n            &amp;quot;2008-01-01 00:37:00,49.0,30.7,30.10,328,3,12,49,0.00&amp;quot;\r\nFilter Filter-Header\r\n{\r\n    if($_ -match &amp;quot;^Time&amp;quot;)\r\n    {\r\n        $_ | out-null\r\n    }\r\n    else\r\n    {\r\n        $_\r\n    }\r\n}\r\n#Combi-Filter using array of FilterInfo objects\r\nFilter Filter-USToMetricA($d=&amp;quot;,&amp;quot;)\r\n{\r\n    $Fields = $_.Split($d)\r\n   \r\n    for ($i = 0; $i -lt 9; $i++)\r\n    {\r\n        $Fields[$i] = $Fields[$i] | &amp;amp;$ConversionTable[$i]\r\n    }\r\n\r\n    $Record = [String]::Join($d, $Fields)\r\n    return $Record\r\n}\r\n\r\n$Results = $Records | Filter-Header | Filter-USToMetricA\r\n$Results\r\n');
					&lt;/script&gt;

&lt;span id="toc_5"&gt;&lt;/span&gt;&lt;h3&gt;Download&lt;/h3&gt;

&lt;p&gt;The complete PowerShell script can be downloaded here: &lt;a title="Convert-USToMetric.zip" href="http://www.tellingmachine.com/file.axd?file=Convert-USToMetric.zip" rel="enclosure"&gt;Convert-USToMetric.zip&lt;/a&gt;&lt;/p&gt;

&lt;span id="toc_6"&gt;&lt;/span&gt;&lt;h3&gt;Ausblick&lt;/h3&gt;

&lt;p&gt;In one of my next blog posts I am going to write about how to use Filter functions to extend CSV files with new fields.&lt;/p&gt;</description>
      <link>http://www.tellingmachine.com/post/2009/07/Using-PowerShell-Filter-functions-to-convert-weather-comma-separated-datasets-from-the-US-to-the-metric-system.aspx</link>
      <author>Klaus Graefensteiner</author>
      <comments>http://www.tellingmachine.com/post/2009/07/Using-PowerShell-Filter-functions-to-convert-weather-comma-separated-datasets-from-the-US-to-the-metric-system.aspx#comment</comments>
      <guid>http://www.tellingmachine.com/post.aspx?id=61fca07d-55da-4355-b147-1a4605e4d246</guid>
      <pubDate>Tue, 07 Jul 2009 05:07:47 -0700</pubDate>
      <category>Weather Station</category>
      <category>Tips &amp; Tricks</category>
      <category>PowerShell</category>
      <dc:publisher>Klaus Graefensteiner</dc:publisher>
      <pingback:server>http://www.tellingmachine.com/pingback.axd</pingback:server>
      <pingback:target>http://www.tellingmachine.com/post.aspx?id=61fca07d-55da-4355-b147-1a4605e4d246</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tellingmachine.com/trackback.axd?id=61fca07d-55da-4355-b147-1a4605e4d246</trackback:ping>
      <wfw:comment>http://www.tellingmachine.com/post/2009/07/Using-PowerShell-Filter-functions-to-convert-weather-comma-separated-datasets-from-the-US-to-the-metric-system.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tellingmachine.com/syndication.axd?post=61fca07d-55da-4355-b147-1a4605e4d246</wfw:commentRss>
    </item>
  </channel>
</rss>
