doc/TaskJuggler/CSVFile.html in taskjuggler-0.0.8 vs doc/TaskJuggler/CSVFile.html in taskjuggler-0.0.9

- old
+ new

@@ -139,10 +139,12 @@ <li><a href="../TaskJuggler/AttributeBase.html">TaskJuggler::AttributeBase</a></li> <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li> + <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li> + <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li> <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li> <li><a href="../TaskJuggler/BookingListAttribute.html">TaskJuggler::BookingListAttribute</a></li> @@ -217,10 +219,12 @@ <li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li> <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li> + <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li> + <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li> <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li> <li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li> @@ -249,10 +253,12 @@ <li><a href="../TaskJuggler/LogicalExpression.html">TaskJuggler::LogicalExpression</a></li> <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li> + <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li> + <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li> <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li> <li><a href="../TaskJuggler/LogicalOperation.html">TaskJuggler::LogicalOperation</a></li> @@ -529,10 +535,12 @@ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li> <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li> + <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li> + <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li> <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li> <li><a href="../TaskJuggler/XMLBlob.html">TaskJuggler::XMLBlob</a></li> @@ -555,12 +563,10 @@ <li><a href="../RuntimeConfig.html">RuntimeConfig</a></li> <li><a href="../String.html">String</a></li> - <li><a href="../StringIO.html">StringIO</a></li> - </ul> <div id="no-class-search-results" style="display: none;">No matching classes.</div> </div> @@ -634,18 +640,18 @@ <div class="method-source-code" id="new-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 27</span> -27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'&quot;'</span>) -28: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span> -29: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal separator: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'.&quot;'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>) -30: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span> -31: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal quote: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quote</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> -32: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span> -33: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 28</span> +28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'&quot;'</span>) +29: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span> +30: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal separator: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'.&quot;'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>) +31: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span> +32: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal quote: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quote</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> +33: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span> +34: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -678,25 +684,25 @@ <div class="method-source-code" id="str-o-ative-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 182</span> -182: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">str</span>) -183: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span> -184: <span class="ruby-keyword kw">nil</span> -185: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d+$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span> -186: <span class="ruby-comment cmt"># field is a Fixnum</span> -187: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span> -188: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d*\.?\d+([eE][-+]?\d+)?$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span> -189: <span class="ruby-comment cmt"># field is a Float</span> -190: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span> -191: <span class="ruby-keyword kw">else</span> -192: <span class="ruby-comment cmt"># Everything else is kept as String</span> -193: <span class="ruby-identifier">str</span> -194: <span class="ruby-keyword kw">end</span> -195: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 183</span> +183: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">str</span>) +184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span> +185: <span class="ruby-keyword kw">nil</span> +186: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d+$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span> +187: <span class="ruby-comment cmt"># field is a Fixnum</span> +188: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span> +189: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d*\.?\d+([eE][-+]?\d+)?$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span> +190: <span class="ruby-comment cmt"># field is a Float</span> +191: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span> +192: <span class="ruby-keyword kw">else</span> +193: <span class="ruby-comment cmt"># Everything else is kept as String</span> +194: <span class="ruby-identifier">str</span> +195: <span class="ruby-keyword kw">end</span> +196: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -732,105 +738,105 @@ <div class="method-source-code" id="parse-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 84</span> - 84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>) - 85: <span class="ruby-ivar">@data</span> = [] - 86: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span> - 87: <span class="ruby-identifier">fields</span> = <span class="ruby-identifier">field</span> = <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">nil</span> - 88: - 89: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span> - 90: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span> - 91: - 92: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> - 93: <span class="ruby-comment cmt">#puts &quot;c: #{c} State: #{state}&quot;</span> - 94: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span> - 95: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span> - 96: <span class="ruby-comment cmt"># This will store the fields of a record</span> - 97: <span class="ruby-identifier">fields</span> = [] - 98: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span> - 99: <span class="ruby-keyword kw">redo</span> -100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span> -101: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span> -102: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span> -103: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> -104: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span> -105: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span> -106: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span> -107: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> -108: <span class="ruby-comment cmt"># We've found an empty field</span> -109: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span> -110: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> -111: <span class="ruby-keyword kw">redo</span> -112: <span class="ruby-keyword kw">else</span> -113: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span> -114: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> -115: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span> -116: <span class="ruby-keyword kw">end</span> -117: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span> -118: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span> -119: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> -120: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span> -121: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span> -122: <span class="ruby-keyword kw">else</span> -123: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span> -124: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> -125: <span class="ruby-keyword kw">end</span> -126: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span> -127: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span> -128: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> -129: <span class="ruby-comment cmt"># We've found a quoted quote</span> -130: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> -131: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span> -132: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> -133: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> -134: <span class="ruby-keyword kw">redo</span> -135: <span class="ruby-keyword kw">else</span> -136: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected character #{c} in CSV&quot;</span> -137: <span class="ruby-keyword kw">end</span> -138: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span> -139: <span class="ruby-comment cmt"># We are processing an unquoted field</span> -140: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> -141: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span> -142: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> -143: <span class="ruby-keyword kw">redo</span> -144: <span class="ruby-keyword kw">else</span> -145: <span class="ruby-comment cmt"># A normal character of an unquoted field</span> -146: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> -147: <span class="ruby-keyword kw">end</span> -148: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span> -149: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span> -150: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span> -151: <span class="ruby-identifier">fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>) -152: -153: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> -154: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span> -155: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span> -156: <span class="ruby-keyword kw">redo</span> -157: <span class="ruby-keyword kw">else</span> -158: <span class="ruby-comment cmt"># Get the next field.</span> -159: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span> -160: <span class="ruby-keyword kw">end</span> -161: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span> -162: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span> -163: <span class="ruby-comment cmt"># structure.</span> -164: <span class="ruby-ivar">@data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fields</span> -165: <span class="ruby-comment cmt"># Look for a new record.</span> -166: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span> -167: <span class="ruby-keyword kw">else</span> -168: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span> -169: <span class="ruby-keyword kw">end</span> -170: <span class="ruby-keyword kw">end</span> -171: -172: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:startOfRecord</span> -173: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;CSV state machine error in state #{state}&quot;</span> -174: <span class="ruby-keyword kw">end</span> -175: -176: <span class="ruby-ivar">@data</span> -177: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 85</span> + 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>) + 86: <span class="ruby-ivar">@data</span> = [] + 87: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span> + 88: <span class="ruby-identifier">fields</span> = <span class="ruby-identifier">field</span> = <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">nil</span> + 89: + 90: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span> + 91: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span> + 92: + 93: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> + 94: <span class="ruby-comment cmt">#puts &quot;c: #{c} State: #{state}&quot;</span> + 95: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span> + 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span> + 97: <span class="ruby-comment cmt"># This will store the fields of a record</span> + 98: <span class="ruby-identifier">fields</span> = [] + 99: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span> +100: <span class="ruby-keyword kw">redo</span> +101: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span> +102: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span> +103: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span> +104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> +105: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span> +106: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span> +107: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span> +108: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> +109: <span class="ruby-comment cmt"># We've found an empty field</span> +110: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span> +111: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> +112: <span class="ruby-keyword kw">redo</span> +113: <span class="ruby-keyword kw">else</span> +114: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span> +115: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> +116: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span> +117: <span class="ruby-keyword kw">end</span> +118: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span> +119: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span> +120: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> +121: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span> +122: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span> +123: <span class="ruby-keyword kw">else</span> +124: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span> +125: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> +126: <span class="ruby-keyword kw">end</span> +127: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span> +128: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span> +129: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span> +130: <span class="ruby-comment cmt"># We've found a quoted quote</span> +131: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> +132: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span> +133: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> +134: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> +135: <span class="ruby-keyword kw">redo</span> +136: <span class="ruby-keyword kw">else</span> +137: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected character #{c} in CSV&quot;</span> +138: <span class="ruby-keyword kw">end</span> +139: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span> +140: <span class="ruby-comment cmt"># We are processing an unquoted field</span> +141: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> +142: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span> +143: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span> +144: <span class="ruby-keyword kw">redo</span> +145: <span class="ruby-keyword kw">else</span> +146: <span class="ruby-comment cmt"># A normal character of an unquoted field</span> +147: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> +148: <span class="ruby-keyword kw">end</span> +149: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span> +150: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span> +151: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span> +152: <span class="ruby-identifier">fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>) +153: +154: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span> +155: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span> +156: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span> +157: <span class="ruby-keyword kw">redo</span> +158: <span class="ruby-keyword kw">else</span> +159: <span class="ruby-comment cmt"># Get the next field.</span> +160: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span> +161: <span class="ruby-keyword kw">end</span> +162: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span> +163: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span> +164: <span class="ruby-comment cmt"># structure.</span> +165: <span class="ruby-ivar">@data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fields</span> +166: <span class="ruby-comment cmt"># Look for a new record.</span> +167: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span> +168: <span class="ruby-keyword kw">else</span> +169: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span> +170: <span class="ruby-keyword kw">end</span> +171: <span class="ruby-keyword kw">end</span> +172: +173: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:startOfRecord</span> +174: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;CSV state machine error in state #{state}&quot;</span> +175: <span class="ruby-keyword kw">end</span> +176: +177: <span class="ruby-ivar">@data</span> +178: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -861,23 +867,23 @@ <div class="method-source-code" id="read-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 51</span> -51: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>) -52: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) -53: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span> -54: <span class="ruby-keyword kw">else</span> -55: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>) -56: <span class="ruby-keyword kw">end</span> -57: -58: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>) -59: -60: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> -61: <span class="ruby-ivar">@data</span> -62: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 52</span> +52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>) +53: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) +54: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span> +55: <span class="ruby-keyword kw">else</span> +56: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>) +57: <span class="ruby-keyword kw">end</span> +58: +59: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>) +60: +61: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> +62: <span class="ruby-ivar">@data</span> +63: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -907,28 +913,28 @@ <div class="method-source-code" id="to-s-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 65</span> -65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span> -66: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span> -67: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> -68: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span> -69: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span> -70: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span> -71: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span> -72: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span> -73: <span class="ruby-keyword kw">else</span> -74: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@separator</span> -75: <span class="ruby-keyword kw">end</span> -76: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>) -77: <span class="ruby-keyword kw">end</span> -78: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span> -79: <span class="ruby-keyword kw">end</span> -80: <span class="ruby-identifier">s</span> -81: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 66</span> +66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span> +67: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span> +68: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> +69: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span> +70: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span> +71: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span> +72: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span> +73: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span> +74: <span class="ruby-keyword kw">else</span> +75: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@separator</span> +76: <span class="ruby-keyword kw">end</span> +77: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>) +78: <span class="ruby-keyword kw">end</span> +79: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span> +80: <span class="ruby-keyword kw">end</span> +81: <span class="ruby-identifier">s</span> +82: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -958,22 +964,22 @@ <div class="method-source-code" id="write-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 37</span> -37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>) -38: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) -39: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span> -40: <span class="ruby-keyword kw">else</span> -41: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) -42: <span class="ruby-keyword kw">end</span> -43: -44: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>) -45: -46: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> -47: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 38</span> +38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>) +39: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) +40: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span> +41: <span class="ruby-keyword kw">else</span> +42: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) +43: <span class="ruby-keyword kw">end</span> +44: +45: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>) +46: +47: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> +48: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1009,24 +1015,24 @@ <div class="method-source-code" id="marshal-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 201</span> -201: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>) -202: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span> -203: <span class="ruby-value str">''</span> -204: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Float</span>) -205: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span> -206: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span> -207: <span class="ruby-keyword kw">else</span> -208: <span class="ruby-comment cmt"># Duplicate quote characters.</span> -209: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-node">&quot;#{@quote * 2}&quot;</span>) -210: <span class="ruby-comment cmt"># Enclose the field in quote characters</span> -211: <span class="ruby-ivar">@quote</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@quote</span> -212: <span class="ruby-keyword kw">end</span> -213: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 202</span> +202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>) +203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span> +204: <span class="ruby-value str">''</span> +205: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Float</span>) +206: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span> +207: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span> +208: <span class="ruby-keyword kw">else</span> +209: <span class="ruby-comment cmt"># Duplicate quote characters.</span> +210: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-node">&quot;#{@quote * 2}&quot;</span>) +211: <span class="ruby-comment cmt"># Enclose the field in quote characters</span> +212: <span class="ruby-ivar">@quote</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@quote</span> +213: <span class="ruby-keyword kw">end</span> +214: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1057,19 +1063,19 @@ <div class="method-source-code" id="un-arshal-source"> <pre> - <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 217</span> -217: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>) -218: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span> -219: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quoted</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span> -220: <span class="ruby-identifier">field</span> -221: <span class="ruby-keyword kw">else</span> -222: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span> -223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>) -224: <span class="ruby-keyword kw">end</span> -225: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 218</span> +218: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>) +219: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span> +220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quoted</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span> +221: <span class="ruby-identifier">field</span> +222: <span class="ruby-keyword kw">else</span> +223: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span> +224: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>) +225: <span class="ruby-keyword kw">end</span> +226: <span class="ruby-keyword kw">end</span></pre> </div> </div>