Added: websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVPrinter.html ============================================================================== --- websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVPrinter.html (added) +++ websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVPrinter.html Mon Jan 29 17:25:21 2018 @@ -0,0 +1,411 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> +<title>Source code</title> +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style"> +</head> +<body> +<div class="sourceContainer"> +<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a> +<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a> +<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a> +<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a> +<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a> +<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a> +<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a> +<span class="sourceLineNo">008</span> *<a name="line.8"></a> +<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a> +<span class="sourceLineNo">010</span> *<a name="line.10"></a> +<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a> +<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a> +<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a> +<span class="sourceLineNo">014</span> * See the License for the specific language governing permissions and<a name="line.14"></a> +<span class="sourceLineNo">015</span> * limitations under the License.<a name="line.15"></a> +<span class="sourceLineNo">016</span> */<a name="line.16"></a> +<span class="sourceLineNo">017</span><a name="line.17"></a> +<span class="sourceLineNo">018</span>package org.apache.commons.csv;<a name="line.18"></a> +<span class="sourceLineNo">019</span><a name="line.19"></a> +<span class="sourceLineNo">020</span>import static org.apache.commons.csv.Constants.CR;<a name="line.20"></a> +<span class="sourceLineNo">021</span>import static org.apache.commons.csv.Constants.LF;<a name="line.21"></a> +<span class="sourceLineNo">022</span>import static org.apache.commons.csv.Constants.SP;<a name="line.22"></a> +<span class="sourceLineNo">023</span><a name="line.23"></a> +<span class="sourceLineNo">024</span>import java.io.Closeable;<a name="line.24"></a> +<span class="sourceLineNo">025</span>import java.io.Flushable;<a name="line.25"></a> +<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a> +<span class="sourceLineNo">027</span>import java.sql.ResultSet;<a name="line.27"></a> +<span class="sourceLineNo">028</span>import java.sql.SQLException;<a name="line.28"></a> +<span class="sourceLineNo">029</span><a name="line.29"></a> +<span class="sourceLineNo">030</span>/**<a name="line.30"></a> +<span class="sourceLineNo">031</span> * Prints values in a CSV format.<a name="line.31"></a> +<span class="sourceLineNo">032</span> */<a name="line.32"></a> +<span class="sourceLineNo">033</span>public final class CSVPrinter implements Flushable, Closeable {<a name="line.33"></a> +<span class="sourceLineNo">034</span><a name="line.34"></a> +<span class="sourceLineNo">035</span> /** The place that the values get written. */<a name="line.35"></a> +<span class="sourceLineNo">036</span> private final Appendable out;<a name="line.36"></a> +<span class="sourceLineNo">037</span> private final CSVFormat format;<a name="line.37"></a> +<span class="sourceLineNo">038</span><a name="line.38"></a> +<span class="sourceLineNo">039</span> /** True if we just began a new record. */<a name="line.39"></a> +<span class="sourceLineNo">040</span> private boolean newRecord = true;<a name="line.40"></a> +<span class="sourceLineNo">041</span><a name="line.41"></a> +<span class="sourceLineNo">042</span> /**<a name="line.42"></a> +<span class="sourceLineNo">043</span> * Creates a printer that will print values to the given stream following the CSVFormat.<a name="line.43"></a> +<span class="sourceLineNo">044</span> * <p><a name="line.44"></a> +<span class="sourceLineNo">045</span> * Currently, only a pure encapsulation format or a pure escaping format is supported. Hybrid formats (encapsulation<a name="line.45"></a> +<span class="sourceLineNo">046</span> * and escaping with a different character) are not supported.<a name="line.46"></a> +<span class="sourceLineNo">047</span> * </p><a name="line.47"></a> +<span class="sourceLineNo">048</span> *<a name="line.48"></a> +<span class="sourceLineNo">049</span> * @param out<a name="line.49"></a> +<span class="sourceLineNo">050</span> * stream to which to print. Must not be null.<a name="line.50"></a> +<span class="sourceLineNo">051</span> * @param format<a name="line.51"></a> +<span class="sourceLineNo">052</span> * the CSV format. Must not be null.<a name="line.52"></a> +<span class="sourceLineNo">053</span> * @throws IOException<a name="line.53"></a> +<span class="sourceLineNo">054</span> * thrown if the optional header cannot be printed.<a name="line.54"></a> +<span class="sourceLineNo">055</span> * @throws IllegalArgumentException<a name="line.55"></a> +<span class="sourceLineNo">056</span> * thrown if the parameters of the format are inconsistent or if either out or format are null.<a name="line.56"></a> +<span class="sourceLineNo">057</span> */<a name="line.57"></a> +<span class="sourceLineNo">058</span> public CSVPrinter(final Appendable out, final CSVFormat format) throws IOException {<a name="line.58"></a> +<span class="sourceLineNo">059</span> Assertions.notNull(out, "out");<a name="line.59"></a> +<span class="sourceLineNo">060</span> Assertions.notNull(format, "format");<a name="line.60"></a> +<span class="sourceLineNo">061</span><a name="line.61"></a> +<span class="sourceLineNo">062</span> this.out = out;<a name="line.62"></a> +<span class="sourceLineNo">063</span> this.format = format;<a name="line.63"></a> +<span class="sourceLineNo">064</span> // TODO: Is it a good idea to do this here instead of on the first call to a print method?<a name="line.64"></a> +<span class="sourceLineNo">065</span> // It seems a pain to have to track whether the header has already been printed or not.<a name="line.65"></a> +<span class="sourceLineNo">066</span> if (format.getHeaderComments() != null) {<a name="line.66"></a> +<span class="sourceLineNo">067</span> for (final String line : format.getHeaderComments()) {<a name="line.67"></a> +<span class="sourceLineNo">068</span> if (line != null) {<a name="line.68"></a> +<span class="sourceLineNo">069</span> this.printComment(line);<a name="line.69"></a> +<span class="sourceLineNo">070</span> }<a name="line.70"></a> +<span class="sourceLineNo">071</span> }<a name="line.71"></a> +<span class="sourceLineNo">072</span> }<a name="line.72"></a> +<span class="sourceLineNo">073</span> if (format.getHeader() != null && !format.getSkipHeaderRecord()) {<a name="line.73"></a> +<span class="sourceLineNo">074</span> this.printRecord((Object[]) format.getHeader());<a name="line.74"></a> +<span class="sourceLineNo">075</span> }<a name="line.75"></a> +<span class="sourceLineNo">076</span> }<a name="line.76"></a> +<span class="sourceLineNo">077</span><a name="line.77"></a> +<span class="sourceLineNo">078</span> // ======================================================<a name="line.78"></a> +<span class="sourceLineNo">079</span> // printing implementation<a name="line.79"></a> +<span class="sourceLineNo">080</span> // ======================================================<a name="line.80"></a> +<span class="sourceLineNo">081</span><a name="line.81"></a> +<span class="sourceLineNo">082</span> @Override<a name="line.82"></a> +<span class="sourceLineNo">083</span> public void close() throws IOException {<a name="line.83"></a> +<span class="sourceLineNo">084</span> if (out instanceof Closeable) {<a name="line.84"></a> +<span class="sourceLineNo">085</span> ((Closeable) out).close();<a name="line.85"></a> +<span class="sourceLineNo">086</span> }<a name="line.86"></a> +<span class="sourceLineNo">087</span> }<a name="line.87"></a> +<span class="sourceLineNo">088</span><a name="line.88"></a> +<span class="sourceLineNo">089</span> /**<a name="line.89"></a> +<span class="sourceLineNo">090</span> * Flushes the underlying stream.<a name="line.90"></a> +<span class="sourceLineNo">091</span> *<a name="line.91"></a> +<span class="sourceLineNo">092</span> * @throws IOException<a name="line.92"></a> +<span class="sourceLineNo">093</span> * If an I/O error occurs<a name="line.93"></a> +<span class="sourceLineNo">094</span> */<a name="line.94"></a> +<span class="sourceLineNo">095</span> @Override<a name="line.95"></a> +<span class="sourceLineNo">096</span> public void flush() throws IOException {<a name="line.96"></a> +<span class="sourceLineNo">097</span> if (out instanceof Flushable) {<a name="line.97"></a> +<span class="sourceLineNo">098</span> ((Flushable) out).flush();<a name="line.98"></a> +<span class="sourceLineNo">099</span> }<a name="line.99"></a> +<span class="sourceLineNo">100</span> }<a name="line.100"></a> +<span class="sourceLineNo">101</span><a name="line.101"></a> +<span class="sourceLineNo">102</span> /**<a name="line.102"></a> +<span class="sourceLineNo">103</span> * Gets the target Appendable.<a name="line.103"></a> +<span class="sourceLineNo">104</span> *<a name="line.104"></a> +<span class="sourceLineNo">105</span> * @return the target Appendable.<a name="line.105"></a> +<span class="sourceLineNo">106</span> */<a name="line.106"></a> +<span class="sourceLineNo">107</span> public Appendable getOut() {<a name="line.107"></a> +<span class="sourceLineNo">108</span> return this.out;<a name="line.108"></a> +<span class="sourceLineNo">109</span> }<a name="line.109"></a> +<span class="sourceLineNo">110</span><a name="line.110"></a> +<span class="sourceLineNo">111</span> /**<a name="line.111"></a> +<span class="sourceLineNo">112</span> * Prints the string as the next value on the line. The value will be escaped or encapsulated as needed.<a name="line.112"></a> +<span class="sourceLineNo">113</span> *<a name="line.113"></a> +<span class="sourceLineNo">114</span> * @param value<a name="line.114"></a> +<span class="sourceLineNo">115</span> * value to be output.<a name="line.115"></a> +<span class="sourceLineNo">116</span> * @throws IOException<a name="line.116"></a> +<span class="sourceLineNo">117</span> * If an I/O error occurs<a name="line.117"></a> +<span class="sourceLineNo">118</span> */<a name="line.118"></a> +<span class="sourceLineNo">119</span> public void print(final Object value) throws IOException {<a name="line.119"></a> +<span class="sourceLineNo">120</span> format.print(value, out, newRecord);<a name="line.120"></a> +<span class="sourceLineNo">121</span> newRecord = false;<a name="line.121"></a> +<span class="sourceLineNo">122</span> }<a name="line.122"></a> +<span class="sourceLineNo">123</span><a name="line.123"></a> +<span class="sourceLineNo">124</span> /**<a name="line.124"></a> +<span class="sourceLineNo">125</span> * Prints a comment on a new line among the delimiter separated values.<a name="line.125"></a> +<span class="sourceLineNo">126</span> *<a name="line.126"></a> +<span class="sourceLineNo">127</span> * <p><a name="line.127"></a> +<span class="sourceLineNo">128</span> * Comments will always begin on a new line and occupy a least one full line. The character specified to start<a name="line.128"></a> +<span class="sourceLineNo">129</span> * comments and a space will be inserted at the beginning of each new line in the comment.<a name="line.129"></a> +<span class="sourceLineNo">130</span> * </p><a name="line.130"></a> +<span class="sourceLineNo">131</span> *<a name="line.131"></a> +<span class="sourceLineNo">132</span> * If comments are disabled in the current CSV format this method does nothing.<a name="line.132"></a> +<span class="sourceLineNo">133</span> *<a name="line.133"></a> +<span class="sourceLineNo">134</span> * @param comment<a name="line.134"></a> +<span class="sourceLineNo">135</span> * the comment to output<a name="line.135"></a> +<span class="sourceLineNo">136</span> * @throws IOException<a name="line.136"></a> +<span class="sourceLineNo">137</span> * If an I/O error occurs<a name="line.137"></a> +<span class="sourceLineNo">138</span> */<a name="line.138"></a> +<span class="sourceLineNo">139</span> public void printComment(final String comment) throws IOException {<a name="line.139"></a> +<span class="sourceLineNo">140</span> if (!format.isCommentMarkerSet()) {<a name="line.140"></a> +<span class="sourceLineNo">141</span> return;<a name="line.141"></a> +<span class="sourceLineNo">142</span> }<a name="line.142"></a> +<span class="sourceLineNo">143</span> if (!newRecord) {<a name="line.143"></a> +<span class="sourceLineNo">144</span> println();<a name="line.144"></a> +<span class="sourceLineNo">145</span> }<a name="line.145"></a> +<span class="sourceLineNo">146</span> out.append(format.getCommentMarker().charValue());<a name="line.146"></a> +<span class="sourceLineNo">147</span> out.append(SP);<a name="line.147"></a> +<span class="sourceLineNo">148</span> for (int i = 0; i < comment.length(); i++) {<a name="line.148"></a> +<span class="sourceLineNo">149</span> final char c = comment.charAt(i);<a name="line.149"></a> +<span class="sourceLineNo">150</span> switch (c) {<a name="line.150"></a> +<span class="sourceLineNo">151</span> case CR:<a name="line.151"></a> +<span class="sourceLineNo">152</span> if (i + 1 < comment.length() && comment.charAt(i + 1) == LF) {<a name="line.152"></a> +<span class="sourceLineNo">153</span> i++;<a name="line.153"></a> +<span class="sourceLineNo">154</span> }<a name="line.154"></a> +<span class="sourceLineNo">155</span> //$FALL-THROUGH$ break intentionally excluded.<a name="line.155"></a> +<span class="sourceLineNo">156</span> case LF:<a name="line.156"></a> +<span class="sourceLineNo">157</span> println();<a name="line.157"></a> +<span class="sourceLineNo">158</span> out.append(format.getCommentMarker().charValue());<a name="line.158"></a> +<span class="sourceLineNo">159</span> out.append(SP);<a name="line.159"></a> +<span class="sourceLineNo">160</span> break;<a name="line.160"></a> +<span class="sourceLineNo">161</span> default:<a name="line.161"></a> +<span class="sourceLineNo">162</span> out.append(c);<a name="line.162"></a> +<span class="sourceLineNo">163</span> break;<a name="line.163"></a> +<span class="sourceLineNo">164</span> }<a name="line.164"></a> +<span class="sourceLineNo">165</span> }<a name="line.165"></a> +<span class="sourceLineNo">166</span> println();<a name="line.166"></a> +<span class="sourceLineNo">167</span> }<a name="line.167"></a> +<span class="sourceLineNo">168</span><a name="line.168"></a> +<span class="sourceLineNo">169</span> /**<a name="line.169"></a> +<span class="sourceLineNo">170</span> * Outputs the record separator.<a name="line.170"></a> +<span class="sourceLineNo">171</span> *<a name="line.171"></a> +<span class="sourceLineNo">172</span> * @throws IOException<a name="line.172"></a> +<span class="sourceLineNo">173</span> * If an I/O error occurs<a name="line.173"></a> +<span class="sourceLineNo">174</span> */<a name="line.174"></a> +<span class="sourceLineNo">175</span> public void println() throws IOException {<a name="line.175"></a> +<span class="sourceLineNo">176</span> format.println(out);<a name="line.176"></a> +<span class="sourceLineNo">177</span> newRecord = true;<a name="line.177"></a> +<span class="sourceLineNo">178</span> }<a name="line.178"></a> +<span class="sourceLineNo">179</span><a name="line.179"></a> +<span class="sourceLineNo">180</span> /**<a name="line.180"></a> +<span class="sourceLineNo">181</span> * Prints the given values a single record of delimiter separated values followed by the record separator.<a name="line.181"></a> +<span class="sourceLineNo">182</span> *<a name="line.182"></a> +<span class="sourceLineNo">183</span> * <p><a name="line.183"></a> +<span class="sourceLineNo">184</span> * The values will be quoted if needed. Quotes and newLine characters will be escaped. This method adds the record<a name="line.184"></a> +<span class="sourceLineNo">185</span> * separator to the output after printing the record, so there is no need to call {@link #println()}.<a name="line.185"></a> +<span class="sourceLineNo">186</span> * </p><a name="line.186"></a> +<span class="sourceLineNo">187</span> *<a name="line.187"></a> +<span class="sourceLineNo">188</span> * @param values<a name="line.188"></a> +<span class="sourceLineNo">189</span> * values to output.<a name="line.189"></a> +<span class="sourceLineNo">190</span> * @throws IOException<a name="line.190"></a> +<span class="sourceLineNo">191</span> * If an I/O error occurs<a name="line.191"></a> +<span class="sourceLineNo">192</span> */<a name="line.192"></a> +<span class="sourceLineNo">193</span> public void printRecord(final Iterable<?> values) throws IOException {<a name="line.193"></a> +<span class="sourceLineNo">194</span> for (final Object value : values) {<a name="line.194"></a> +<span class="sourceLineNo">195</span> print(value);<a name="line.195"></a> +<span class="sourceLineNo">196</span> }<a name="line.196"></a> +<span class="sourceLineNo">197</span> println();<a name="line.197"></a> +<span class="sourceLineNo">198</span> }<a name="line.198"></a> +<span class="sourceLineNo">199</span><a name="line.199"></a> +<span class="sourceLineNo">200</span> /**<a name="line.200"></a> +<span class="sourceLineNo">201</span> * Prints the given values a single record of delimiter separated values followed by the record separator.<a name="line.201"></a> +<span class="sourceLineNo">202</span> *<a name="line.202"></a> +<span class="sourceLineNo">203</span> * <p><a name="line.203"></a> +<span class="sourceLineNo">204</span> * The values will be quoted if needed. Quotes and newLine characters will be escaped. This method adds the record<a name="line.204"></a> +<span class="sourceLineNo">205</span> * separator to the output after printing the record, so there is no need to call {@link #println()}.<a name="line.205"></a> +<span class="sourceLineNo">206</span> * </p><a name="line.206"></a> +<span class="sourceLineNo">207</span> *<a name="line.207"></a> +<span class="sourceLineNo">208</span> * @param values<a name="line.208"></a> +<span class="sourceLineNo">209</span> * values to output.<a name="line.209"></a> +<span class="sourceLineNo">210</span> * @throws IOException<a name="line.210"></a> +<span class="sourceLineNo">211</span> * If an I/O error occurs<a name="line.211"></a> +<span class="sourceLineNo">212</span> */<a name="line.212"></a> +<span class="sourceLineNo">213</span> public void printRecord(final Object... values) throws IOException {<a name="line.213"></a> +<span class="sourceLineNo">214</span> format.printRecord(out, values);<a name="line.214"></a> +<span class="sourceLineNo">215</span> newRecord = true;<a name="line.215"></a> +<span class="sourceLineNo">216</span> }<a name="line.216"></a> +<span class="sourceLineNo">217</span><a name="line.217"></a> +<span class="sourceLineNo">218</span> /**<a name="line.218"></a> +<span class="sourceLineNo">219</span> * Prints all the objects in the given collection handling nested collections/arrays as records.<a name="line.219"></a> +<span class="sourceLineNo">220</span> *<a name="line.220"></a> +<span class="sourceLineNo">221</span> * <p><a name="line.221"></a> +<span class="sourceLineNo">222</span> * If the given collection only contains simple objects, this method will print a single record like<a name="line.222"></a> +<span class="sourceLineNo">223</span> * {@link #printRecord(Iterable)}. If the given collections contains nested collections/arrays those nested elements<a name="line.223"></a> +<span class="sourceLineNo">224</span> * will each be printed as records using {@link #printRecord(Object...)}.<a name="line.224"></a> +<span class="sourceLineNo">225</span> * </p><a name="line.225"></a> +<span class="sourceLineNo">226</span> *<a name="line.226"></a> +<span class="sourceLineNo">227</span> * <p><a name="line.227"></a> +<span class="sourceLineNo">228</span> * Given the following data structure:<a name="line.228"></a> +<span class="sourceLineNo">229</span> * </p><a name="line.229"></a> +<span class="sourceLineNo">230</span> *<a name="line.230"></a> +<span class="sourceLineNo">231</span> * <pre><a name="line.231"></a> +<span class="sourceLineNo">232</span> * <code><a name="line.232"></a> +<span class="sourceLineNo">233</span> * List&lt;String[]&gt; data = ...<a name="line.233"></a> +<span class="sourceLineNo">234</span> * data.add(new String[]{ "A", "B", "C" });<a name="line.234"></a> +<span class="sourceLineNo">235</span> * data.add(new String[]{ "1", "2", "3" });<a name="line.235"></a> +<span class="sourceLineNo">236</span> * data.add(new String[]{ "A1", "B2", "C3" });<a name="line.236"></a> +<span class="sourceLineNo">237</span> * </code><a name="line.237"></a> +<span class="sourceLineNo">238</span> * </pre><a name="line.238"></a> +<span class="sourceLineNo">239</span> *<a name="line.239"></a> +<span class="sourceLineNo">240</span> * <p><a name="line.240"></a> +<span class="sourceLineNo">241</span> * Calling this method will print:<a name="line.241"></a> +<span class="sourceLineNo">242</span> * </p><a name="line.242"></a> +<span class="sourceLineNo">243</span> *<a name="line.243"></a> +<span class="sourceLineNo">244</span> * <pre><a name="line.244"></a> +<span class="sourceLineNo">245</span> * <code><a name="line.245"></a> +<span class="sourceLineNo">246</span> * A, B, C<a name="line.246"></a> +<span class="sourceLineNo">247</span> * 1, 2, 3<a name="line.247"></a> +<span class="sourceLineNo">248</span> * A1, B2, C3<a name="line.248"></a> +<span class="sourceLineNo">249</span> * </code><a name="line.249"></a> +<span class="sourceLineNo">250</span> * </pre><a name="line.250"></a> +<span class="sourceLineNo">251</span> *<a name="line.251"></a> +<span class="sourceLineNo">252</span> * @param values<a name="line.252"></a> +<span class="sourceLineNo">253</span> * the values to print.<a name="line.253"></a> +<span class="sourceLineNo">254</span> * @throws IOException<a name="line.254"></a> +<span class="sourceLineNo">255</span> * If an I/O error occurs<a name="line.255"></a> +<span class="sourceLineNo">256</span> */<a name="line.256"></a> +<span class="sourceLineNo">257</span> public void printRecords(final Iterable<?> values) throws IOException {<a name="line.257"></a> +<span class="sourceLineNo">258</span> for (final Object value : values) {<a name="line.258"></a> +<span class="sourceLineNo">259</span> if (value instanceof Object[]) {<a name="line.259"></a> +<span class="sourceLineNo">260</span> this.printRecord((Object[]) value);<a name="line.260"></a> +<span class="sourceLineNo">261</span> } else if (value instanceof Iterable) {<a name="line.261"></a> +<span class="sourceLineNo">262</span> this.printRecord((Iterable<?>) value);<a name="line.262"></a> +<span class="sourceLineNo">263</span> } else {<a name="line.263"></a> +<span class="sourceLineNo">264</span> this.printRecord(value);<a name="line.264"></a> +<span class="sourceLineNo">265</span> }<a name="line.265"></a> +<span class="sourceLineNo">266</span> }<a name="line.266"></a> +<span class="sourceLineNo">267</span> }<a name="line.267"></a> +<span class="sourceLineNo">268</span><a name="line.268"></a> +<span class="sourceLineNo">269</span> /**<a name="line.269"></a> +<span class="sourceLineNo">270</span> * Prints all the objects in the given array handling nested collections/arrays as records.<a name="line.270"></a> +<span class="sourceLineNo">271</span> *<a name="line.271"></a> +<span class="sourceLineNo">272</span> * <p><a name="line.272"></a> +<span class="sourceLineNo">273</span> * If the given array only contains simple objects, this method will print a single record like<a name="line.273"></a> +<span class="sourceLineNo">274</span> * {@link #printRecord(Object...)}. If the given collections contains nested collections/arrays those nested<a name="line.274"></a> +<span class="sourceLineNo">275</span> * elements will each be printed as records using {@link #printRecord(Object...)}.<a name="line.275"></a> +<span class="sourceLineNo">276</span> * </p><a name="line.276"></a> +<span class="sourceLineNo">277</span> *<a name="line.277"></a> +<span class="sourceLineNo">278</span> * <p><a name="line.278"></a> +<span class="sourceLineNo">279</span> * Given the following data structure:<a name="line.279"></a> +<span class="sourceLineNo">280</span> * </p><a name="line.280"></a> +<span class="sourceLineNo">281</span> *<a name="line.281"></a> +<span class="sourceLineNo">282</span> * <pre><a name="line.282"></a> +<span class="sourceLineNo">283</span> * <code><a name="line.283"></a> +<span class="sourceLineNo">284</span> * String[][] data = new String[3][]<a name="line.284"></a> +<span class="sourceLineNo">285</span> * data[0] = String[]{ "A", "B", "C" };<a name="line.285"></a> +<span class="sourceLineNo">286</span> * data[1] = new String[]{ "1", "2", "3" };<a name="line.286"></a> +<span class="sourceLineNo">287</span> * data[2] = new String[]{ "A1", "B2", "C3" };<a name="line.287"></a> +<span class="sourceLineNo">288</span> * </code><a name="line.288"></a> +<span class="sourceLineNo">289</span> * </pre><a name="line.289"></a> +<span class="sourceLineNo">290</span> *<a name="line.290"></a> +<span class="sourceLineNo">291</span> * <p><a name="line.291"></a> +<span class="sourceLineNo">292</span> * Calling this method will print:<a name="line.292"></a> +<span class="sourceLineNo">293</span> * </p><a name="line.293"></a> +<span class="sourceLineNo">294</span> *<a name="line.294"></a> +<span class="sourceLineNo">295</span> * <pre><a name="line.295"></a> +<span class="sourceLineNo">296</span> * <code><a name="line.296"></a> +<span class="sourceLineNo">297</span> * A, B, C<a name="line.297"></a> +<span class="sourceLineNo">298</span> * 1, 2, 3<a name="line.298"></a> +<span class="sourceLineNo">299</span> * A1, B2, C3<a name="line.299"></a> +<span class="sourceLineNo">300</span> * </code><a name="line.300"></a> +<span class="sourceLineNo">301</span> * </pre><a name="line.301"></a> +<span class="sourceLineNo">302</span> *<a name="line.302"></a> +<span class="sourceLineNo">303</span> * @param values<a name="line.303"></a> +<span class="sourceLineNo">304</span> * the values to print.<a name="line.304"></a> +<span class="sourceLineNo">305</span> * @throws IOException<a name="line.305"></a> +<span class="sourceLineNo">306</span> * If an I/O error occurs<a name="line.306"></a> +<span class="sourceLineNo">307</span> */<a name="line.307"></a> +<span class="sourceLineNo">308</span> public void printRecords(final Object... values) throws IOException {<a name="line.308"></a> +<span class="sourceLineNo">309</span> for (final Object value : values) {<a name="line.309"></a> +<span class="sourceLineNo">310</span> if (value instanceof Object[]) {<a name="line.310"></a> +<span class="sourceLineNo">311</span> this.printRecord((Object[]) value);<a name="line.311"></a> +<span class="sourceLineNo">312</span> } else if (value instanceof Iterable) {<a name="line.312"></a> +<span class="sourceLineNo">313</span> this.printRecord((Iterable<?>) value);<a name="line.313"></a> +<span class="sourceLineNo">314</span> } else {<a name="line.314"></a> +<span class="sourceLineNo">315</span> this.printRecord(value);<a name="line.315"></a> +<span class="sourceLineNo">316</span> }<a name="line.316"></a> +<span class="sourceLineNo">317</span> }<a name="line.317"></a> +<span class="sourceLineNo">318</span> }<a name="line.318"></a> +<span class="sourceLineNo">319</span><a name="line.319"></a> +<span class="sourceLineNo">320</span> /**<a name="line.320"></a> +<span class="sourceLineNo">321</span> * Prints all the objects in the given JDBC result set.<a name="line.321"></a> +<span class="sourceLineNo">322</span> *<a name="line.322"></a> +<span class="sourceLineNo">323</span> * @param resultSet<a name="line.323"></a> +<span class="sourceLineNo">324</span> * result set the values to print.<a name="line.324"></a> +<span class="sourceLineNo">325</span> * @throws IOException<a name="line.325"></a> +<span class="sourceLineNo">326</span> * If an I/O error occurs<a name="line.326"></a> +<span class="sourceLineNo">327</span> * @throws SQLException<a name="line.327"></a> +<span class="sourceLineNo">328</span> * if a database access error occurs<a name="line.328"></a> +<span class="sourceLineNo">329</span> */<a name="line.329"></a> +<span class="sourceLineNo">330</span> public void printRecords(final ResultSet resultSet) throws SQLException, IOException {<a name="line.330"></a> +<span class="sourceLineNo">331</span> final int columnCount = resultSet.getMetaData().getColumnCount();<a name="line.331"></a> +<span class="sourceLineNo">332</span> while (resultSet.next()) {<a name="line.332"></a> +<span class="sourceLineNo">333</span> for (int i = 1; i <= columnCount; i++) {<a name="line.333"></a> +<span class="sourceLineNo">334</span> print(resultSet.getObject(i));<a name="line.334"></a> +<span class="sourceLineNo">335</span> }<a name="line.335"></a> +<span class="sourceLineNo">336</span> println();<a name="line.336"></a> +<span class="sourceLineNo">337</span> }<a name="line.337"></a> +<span class="sourceLineNo">338</span> }<a name="line.338"></a> +<span class="sourceLineNo">339</span>}<a name="line.339"></a> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +</pre> +</div> +</body> +</html>
Added: websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVRecord.html ============================================================================== --- websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVRecord.html (added) +++ websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/CSVRecord.html Mon Jan 29 17:25:21 2018 @@ -0,0 +1,348 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> +<title>Source code</title> +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style"> +</head> +<body> +<div class="sourceContainer"> +<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a> +<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a> +<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a> +<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a> +<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a> +<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a> +<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a> +<span class="sourceLineNo">008</span> *<a name="line.8"></a> +<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a> +<span class="sourceLineNo">010</span> *<a name="line.10"></a> +<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a> +<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a> +<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a> +<span class="sourceLineNo">014</span> * See the License for the specific language governing permissions and<a name="line.14"></a> +<span class="sourceLineNo">015</span> * limitations under the License.<a name="line.15"></a> +<span class="sourceLineNo">016</span> */<a name="line.16"></a> +<span class="sourceLineNo">017</span><a name="line.17"></a> +<span class="sourceLineNo">018</span>package org.apache.commons.csv;<a name="line.18"></a> +<span class="sourceLineNo">019</span><a name="line.19"></a> +<span class="sourceLineNo">020</span>import java.io.Serializable;<a name="line.20"></a> +<span class="sourceLineNo">021</span>import java.util.Arrays;<a name="line.21"></a> +<span class="sourceLineNo">022</span>import java.util.HashMap;<a name="line.22"></a> +<span class="sourceLineNo">023</span>import java.util.Iterator;<a name="line.23"></a> +<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a> +<span class="sourceLineNo">025</span>import java.util.Map;<a name="line.25"></a> +<span class="sourceLineNo">026</span>import java.util.Map.Entry;<a name="line.26"></a> +<span class="sourceLineNo">027</span><a name="line.27"></a> +<span class="sourceLineNo">028</span>/**<a name="line.28"></a> +<span class="sourceLineNo">029</span> * A CSV record parsed from a CSV file.<a name="line.29"></a> +<span class="sourceLineNo">030</span> */<a name="line.30"></a> +<span class="sourceLineNo">031</span>public final class CSVRecord implements Serializable, Iterable<String> {<a name="line.31"></a> +<span class="sourceLineNo">032</span><a name="line.32"></a> +<span class="sourceLineNo">033</span> private static final String[] EMPTY_STRING_ARRAY = new String[0];<a name="line.33"></a> +<span class="sourceLineNo">034</span><a name="line.34"></a> +<span class="sourceLineNo">035</span> private static final long serialVersionUID = 1L;<a name="line.35"></a> +<span class="sourceLineNo">036</span><a name="line.36"></a> +<span class="sourceLineNo">037</span> private final long characterPosition;<a name="line.37"></a> +<span class="sourceLineNo">038</span><a name="line.38"></a> +<span class="sourceLineNo">039</span> /** The accumulated comments (if any) */<a name="line.39"></a> +<span class="sourceLineNo">040</span> private final String comment;<a name="line.40"></a> +<span class="sourceLineNo">041</span><a name="line.41"></a> +<span class="sourceLineNo">042</span> /** The column name to index mapping. */<a name="line.42"></a> +<span class="sourceLineNo">043</span> private final Map<String, Integer> mapping;<a name="line.43"></a> +<span class="sourceLineNo">044</span><a name="line.44"></a> +<span class="sourceLineNo">045</span> /** The record number. */<a name="line.45"></a> +<span class="sourceLineNo">046</span> private final long recordNumber;<a name="line.46"></a> +<span class="sourceLineNo">047</span><a name="line.47"></a> +<span class="sourceLineNo">048</span> /** The values of the record */<a name="line.48"></a> +<span class="sourceLineNo">049</span> private final String[] values;<a name="line.49"></a> +<span class="sourceLineNo">050</span><a name="line.50"></a> +<span class="sourceLineNo">051</span> CSVRecord(final String[] values, final Map<String, Integer> mapping, final String comment, final long recordNumber,<a name="line.51"></a> +<span class="sourceLineNo">052</span> final long characterPosition) {<a name="line.52"></a> +<span class="sourceLineNo">053</span> this.recordNumber = recordNumber;<a name="line.53"></a> +<span class="sourceLineNo">054</span> this.values = values != null ? values : EMPTY_STRING_ARRAY;<a name="line.54"></a> +<span class="sourceLineNo">055</span> this.mapping = mapping;<a name="line.55"></a> +<span class="sourceLineNo">056</span> this.comment = comment;<a name="line.56"></a> +<span class="sourceLineNo">057</span> this.characterPosition = characterPosition;<a name="line.57"></a> +<span class="sourceLineNo">058</span> }<a name="line.58"></a> +<span class="sourceLineNo">059</span><a name="line.59"></a> +<span class="sourceLineNo">060</span> /**<a name="line.60"></a> +<span class="sourceLineNo">061</span> * Returns a value by {@link Enum}.<a name="line.61"></a> +<span class="sourceLineNo">062</span> *<a name="line.62"></a> +<span class="sourceLineNo">063</span> * @param e<a name="line.63"></a> +<span class="sourceLineNo">064</span> * an enum<a name="line.64"></a> +<span class="sourceLineNo">065</span> * @return the String at the given enum String<a name="line.65"></a> +<span class="sourceLineNo">066</span> */<a name="line.66"></a> +<span class="sourceLineNo">067</span> public String get(final Enum<?> e) {<a name="line.67"></a> +<span class="sourceLineNo">068</span> return get(e.toString());<a name="line.68"></a> +<span class="sourceLineNo">069</span> }<a name="line.69"></a> +<span class="sourceLineNo">070</span><a name="line.70"></a> +<span class="sourceLineNo">071</span> /**<a name="line.71"></a> +<span class="sourceLineNo">072</span> * Returns a value by index.<a name="line.72"></a> +<span class="sourceLineNo">073</span> *<a name="line.73"></a> +<span class="sourceLineNo">074</span> * @param i<a name="line.74"></a> +<span class="sourceLineNo">075</span> * a column index (0-based)<a name="line.75"></a> +<span class="sourceLineNo">076</span> * @return the String at the given index<a name="line.76"></a> +<span class="sourceLineNo">077</span> */<a name="line.77"></a> +<span class="sourceLineNo">078</span> public String get(final int i) {<a name="line.78"></a> +<span class="sourceLineNo">079</span> return values[i];<a name="line.79"></a> +<span class="sourceLineNo">080</span> }<a name="line.80"></a> +<span class="sourceLineNo">081</span><a name="line.81"></a> +<span class="sourceLineNo">082</span> /**<a name="line.82"></a> +<span class="sourceLineNo">083</span> * Returns a value by name.<a name="line.83"></a> +<span class="sourceLineNo">084</span> *<a name="line.84"></a> +<span class="sourceLineNo">085</span> * @param name<a name="line.85"></a> +<span class="sourceLineNo">086</span> * the name of the column to be retrieved.<a name="line.86"></a> +<span class="sourceLineNo">087</span> * @return the column value, maybe null depending on {@link CSVFormat#getNullString()}.<a name="line.87"></a> +<span class="sourceLineNo">088</span> * @throws IllegalStateException<a name="line.88"></a> +<span class="sourceLineNo">089</span> * if no header mapping was provided<a name="line.89"></a> +<span class="sourceLineNo">090</span> * @throws IllegalArgumentException<a name="line.90"></a> +<span class="sourceLineNo">091</span> * if {@code name} is not mapped or if the record is inconsistent<a name="line.91"></a> +<span class="sourceLineNo">092</span> * @see #isConsistent()<a name="line.92"></a> +<span class="sourceLineNo">093</span> * @see CSVFormat#withNullString(String)<a name="line.93"></a> +<span class="sourceLineNo">094</span> */<a name="line.94"></a> +<span class="sourceLineNo">095</span> public String get(final String name) {<a name="line.95"></a> +<span class="sourceLineNo">096</span> if (mapping == null) {<a name="line.96"></a> +<span class="sourceLineNo">097</span> throw new IllegalStateException(<a name="line.97"></a> +<span class="sourceLineNo">098</span> "No header mapping was specified, the record values can't be accessed by name");<a name="line.98"></a> +<span class="sourceLineNo">099</span> }<a name="line.99"></a> +<span class="sourceLineNo">100</span> final Integer index = mapping.get(name);<a name="line.100"></a> +<span class="sourceLineNo">101</span> if (index == null) {<a name="line.101"></a> +<span class="sourceLineNo">102</span> throw new IllegalArgumentException(String.format("Mapping for %s not found, expected one of %s", name,<a name="line.102"></a> +<span class="sourceLineNo">103</span> mapping.keySet()));<a name="line.103"></a> +<span class="sourceLineNo">104</span> }<a name="line.104"></a> +<span class="sourceLineNo">105</span> try {<a name="line.105"></a> +<span class="sourceLineNo">106</span> return values[index.intValue()];<a name="line.106"></a> +<span class="sourceLineNo">107</span> } catch (final ArrayIndexOutOfBoundsException e) {<a name="line.107"></a> +<span class="sourceLineNo">108</span> throw new IllegalArgumentException(String.format(<a name="line.108"></a> +<span class="sourceLineNo">109</span> "Index for header '%s' is %d but CSVRecord only has %d values!", name, index,<a name="line.109"></a> +<span class="sourceLineNo">110</span> Integer.valueOf(values.length)));<a name="line.110"></a> +<span class="sourceLineNo">111</span> }<a name="line.111"></a> +<span class="sourceLineNo">112</span> }<a name="line.112"></a> +<span class="sourceLineNo">113</span><a name="line.113"></a> +<span class="sourceLineNo">114</span> /**<a name="line.114"></a> +<span class="sourceLineNo">115</span> * Returns the start position of this record as a character position in the source stream. This may or may not<a name="line.115"></a> +<span class="sourceLineNo">116</span> * correspond to the byte position depending on the character set.<a name="line.116"></a> +<span class="sourceLineNo">117</span> *<a name="line.117"></a> +<span class="sourceLineNo">118</span> * @return the position of this record in the source stream.<a name="line.118"></a> +<span class="sourceLineNo">119</span> */<a name="line.119"></a> +<span class="sourceLineNo">120</span> public long getCharacterPosition() {<a name="line.120"></a> +<span class="sourceLineNo">121</span> return characterPosition;<a name="line.121"></a> +<span class="sourceLineNo">122</span> }<a name="line.122"></a> +<span class="sourceLineNo">123</span><a name="line.123"></a> +<span class="sourceLineNo">124</span> /**<a name="line.124"></a> +<span class="sourceLineNo">125</span> * Returns the comment for this record, if any.<a name="line.125"></a> +<span class="sourceLineNo">126</span> * Note that comments are attached to the following record.<a name="line.126"></a> +<span class="sourceLineNo">127</span> * If there is no following record (i.e. the comment is at EOF)<a name="line.127"></a> +<span class="sourceLineNo">128</span> * the comment will be ignored.<a name="line.128"></a> +<span class="sourceLineNo">129</span> *<a name="line.129"></a> +<span class="sourceLineNo">130</span> * @return the comment for this record, or null if no comment for this record is available.<a name="line.130"></a> +<span class="sourceLineNo">131</span> */<a name="line.131"></a> +<span class="sourceLineNo">132</span> public String getComment() {<a name="line.132"></a> +<span class="sourceLineNo">133</span> return comment;<a name="line.133"></a> +<span class="sourceLineNo">134</span> }<a name="line.134"></a> +<span class="sourceLineNo">135</span><a name="line.135"></a> +<span class="sourceLineNo">136</span> /**<a name="line.136"></a> +<span class="sourceLineNo">137</span> * Returns the number of this record in the parsed CSV file.<a name="line.137"></a> +<span class="sourceLineNo">138</span> *<a name="line.138"></a> +<span class="sourceLineNo">139</span> * <p><a name="line.139"></a> +<span class="sourceLineNo">140</span> * <strong>ATTENTION:</strong> If your CSV input has multi-line values, the returned number does not correspond to<a name="line.140"></a> +<span class="sourceLineNo">141</span> * the current line number of the parser that created this record.<a name="line.141"></a> +<span class="sourceLineNo">142</span> * </p><a name="line.142"></a> +<span class="sourceLineNo">143</span> *<a name="line.143"></a> +<span class="sourceLineNo">144</span> * @return the number of this record.<a name="line.144"></a> +<span class="sourceLineNo">145</span> * @see CSVParser#getCurrentLineNumber()<a name="line.145"></a> +<span class="sourceLineNo">146</span> */<a name="line.146"></a> +<span class="sourceLineNo">147</span> public long getRecordNumber() {<a name="line.147"></a> +<span class="sourceLineNo">148</span> return recordNumber;<a name="line.148"></a> +<span class="sourceLineNo">149</span> }<a name="line.149"></a> +<span class="sourceLineNo">150</span><a name="line.150"></a> +<span class="sourceLineNo">151</span> /**<a name="line.151"></a> +<span class="sourceLineNo">152</span> * Tells whether the record size matches the header size.<a name="line.152"></a> +<span class="sourceLineNo">153</span> *<a name="line.153"></a> +<span class="sourceLineNo">154</span> * <p><a name="line.154"></a> +<span class="sourceLineNo">155</span> * Returns true if the sizes for this record match and false if not. Some programs can export files that fail this<a name="line.155"></a> +<span class="sourceLineNo">156</span> * test but still produce parsable files.<a name="line.156"></a> +<span class="sourceLineNo">157</span> * </p><a name="line.157"></a> +<span class="sourceLineNo">158</span> *<a name="line.158"></a> +<span class="sourceLineNo">159</span> * @return true of this record is valid, false if not<a name="line.159"></a> +<span class="sourceLineNo">160</span> */<a name="line.160"></a> +<span class="sourceLineNo">161</span> public boolean isConsistent() {<a name="line.161"></a> +<span class="sourceLineNo">162</span> return mapping == null || mapping.size() == values.length;<a name="line.162"></a> +<span class="sourceLineNo">163</span> }<a name="line.163"></a> +<span class="sourceLineNo">164</span><a name="line.164"></a> +<span class="sourceLineNo">165</span> /**<a name="line.165"></a> +<span class="sourceLineNo">166</span> * Checks whether this record has a comment, false otherwise.<a name="line.166"></a> +<span class="sourceLineNo">167</span> * Note that comments are attached to the following record.<a name="line.167"></a> +<span class="sourceLineNo">168</span> * If there is no following record (i.e. the comment is at EOF)<a name="line.168"></a> +<span class="sourceLineNo">169</span> * the comment will be ignored.<a name="line.169"></a> +<span class="sourceLineNo">170</span> *<a name="line.170"></a> +<span class="sourceLineNo">171</span> * @return true if this record has a comment, false otherwise<a name="line.171"></a> +<span class="sourceLineNo">172</span> * @since 1.3<a name="line.172"></a> +<span class="sourceLineNo">173</span> */<a name="line.173"></a> +<span class="sourceLineNo">174</span> public boolean hasComment() {<a name="line.174"></a> +<span class="sourceLineNo">175</span> return comment != null;<a name="line.175"></a> +<span class="sourceLineNo">176</span> }<a name="line.176"></a> +<span class="sourceLineNo">177</span><a name="line.177"></a> +<span class="sourceLineNo">178</span> /**<a name="line.178"></a> +<span class="sourceLineNo">179</span> * Checks whether a given column is mapped, i.e. its name has been defined to the parser.<a name="line.179"></a> +<span class="sourceLineNo">180</span> *<a name="line.180"></a> +<span class="sourceLineNo">181</span> * @param name<a name="line.181"></a> +<span class="sourceLineNo">182</span> * the name of the column to be retrieved.<a name="line.182"></a> +<span class="sourceLineNo">183</span> * @return whether a given column is mapped.<a name="line.183"></a> +<span class="sourceLineNo">184</span> */<a name="line.184"></a> +<span class="sourceLineNo">185</span> public boolean isMapped(final String name) {<a name="line.185"></a> +<span class="sourceLineNo">186</span> return mapping != null && mapping.containsKey(name);<a name="line.186"></a> +<span class="sourceLineNo">187</span> }<a name="line.187"></a> +<span class="sourceLineNo">188</span><a name="line.188"></a> +<span class="sourceLineNo">189</span> /**<a name="line.189"></a> +<span class="sourceLineNo">190</span> * Checks whether a given columns is mapped and has a value.<a name="line.190"></a> +<span class="sourceLineNo">191</span> *<a name="line.191"></a> +<span class="sourceLineNo">192</span> * @param name<a name="line.192"></a> +<span class="sourceLineNo">193</span> * the name of the column to be retrieved.<a name="line.193"></a> +<span class="sourceLineNo">194</span> * @return whether a given columns is mapped and has a value<a name="line.194"></a> +<span class="sourceLineNo">195</span> */<a name="line.195"></a> +<span class="sourceLineNo">196</span> public boolean isSet(final String name) {<a name="line.196"></a> +<span class="sourceLineNo">197</span> return isMapped(name) && mapping.get(name).intValue() < values.length;<a name="line.197"></a> +<span class="sourceLineNo">198</span> }<a name="line.198"></a> +<span class="sourceLineNo">199</span><a name="line.199"></a> +<span class="sourceLineNo">200</span> /**<a name="line.200"></a> +<span class="sourceLineNo">201</span> * Returns an iterator over the values of this record.<a name="line.201"></a> +<span class="sourceLineNo">202</span> *<a name="line.202"></a> +<span class="sourceLineNo">203</span> * @return an iterator over the values of this record.<a name="line.203"></a> +<span class="sourceLineNo">204</span> */<a name="line.204"></a> +<span class="sourceLineNo">205</span> @Override<a name="line.205"></a> +<span class="sourceLineNo">206</span> public Iterator<String> iterator() {<a name="line.206"></a> +<span class="sourceLineNo">207</span> return toList().iterator();<a name="line.207"></a> +<span class="sourceLineNo">208</span> }<a name="line.208"></a> +<span class="sourceLineNo">209</span><a name="line.209"></a> +<span class="sourceLineNo">210</span> /**<a name="line.210"></a> +<span class="sourceLineNo">211</span> * Puts all values of this record into the given Map.<a name="line.211"></a> +<span class="sourceLineNo">212</span> *<a name="line.212"></a> +<span class="sourceLineNo">213</span> * @param map<a name="line.213"></a> +<span class="sourceLineNo">214</span> * The Map to populate.<a name="line.214"></a> +<span class="sourceLineNo">215</span> * @return the given map.<a name="line.215"></a> +<span class="sourceLineNo">216</span> */<a name="line.216"></a> +<span class="sourceLineNo">217</span> <M extends Map<String, String>> M putIn(final M map) {<a name="line.217"></a> +<span class="sourceLineNo">218</span> if (mapping == null) {<a name="line.218"></a> +<span class="sourceLineNo">219</span> return map;<a name="line.219"></a> +<span class="sourceLineNo">220</span> }<a name="line.220"></a> +<span class="sourceLineNo">221</span> for (final Entry<String, Integer> entry : mapping.entrySet()) {<a name="line.221"></a> +<span class="sourceLineNo">222</span> final int col = entry.getValue().intValue();<a name="line.222"></a> +<span class="sourceLineNo">223</span> if (col < values.length) {<a name="line.223"></a> +<span class="sourceLineNo">224</span> map.put(entry.getKey(), values[col]);<a name="line.224"></a> +<span class="sourceLineNo">225</span> }<a name="line.225"></a> +<span class="sourceLineNo">226</span> }<a name="line.226"></a> +<span class="sourceLineNo">227</span> return map;<a name="line.227"></a> +<span class="sourceLineNo">228</span> }<a name="line.228"></a> +<span class="sourceLineNo">229</span><a name="line.229"></a> +<span class="sourceLineNo">230</span> /**<a name="line.230"></a> +<span class="sourceLineNo">231</span> * Returns the number of values in this record.<a name="line.231"></a> +<span class="sourceLineNo">232</span> *<a name="line.232"></a> +<span class="sourceLineNo">233</span> * @return the number of values.<a name="line.233"></a> +<span class="sourceLineNo">234</span> */<a name="line.234"></a> +<span class="sourceLineNo">235</span> public int size() {<a name="line.235"></a> +<span class="sourceLineNo">236</span> return values.length;<a name="line.236"></a> +<span class="sourceLineNo">237</span> }<a name="line.237"></a> +<span class="sourceLineNo">238</span><a name="line.238"></a> +<span class="sourceLineNo">239</span> /**<a name="line.239"></a> +<span class="sourceLineNo">240</span> * Converts the values to a List.<a name="line.240"></a> +<span class="sourceLineNo">241</span> *<a name="line.241"></a> +<span class="sourceLineNo">242</span> * TODO: Maybe make this public?<a name="line.242"></a> +<span class="sourceLineNo">243</span> *<a name="line.243"></a> +<span class="sourceLineNo">244</span> * @return a new List<a name="line.244"></a> +<span class="sourceLineNo">245</span> */<a name="line.245"></a> +<span class="sourceLineNo">246</span> private List<String> toList() {<a name="line.246"></a> +<span class="sourceLineNo">247</span> return Arrays.asList(values);<a name="line.247"></a> +<span class="sourceLineNo">248</span> }<a name="line.248"></a> +<span class="sourceLineNo">249</span><a name="line.249"></a> +<span class="sourceLineNo">250</span> /**<a name="line.250"></a> +<span class="sourceLineNo">251</span> * Copies this record into a new Map. The new map is not connect<a name="line.251"></a> +<span class="sourceLineNo">252</span> *<a name="line.252"></a> +<span class="sourceLineNo">253</span> * @return A new Map. The map is empty if the record has no headers.<a name="line.253"></a> +<span class="sourceLineNo">254</span> */<a name="line.254"></a> +<span class="sourceLineNo">255</span> public Map<String, String> toMap() {<a name="line.255"></a> +<span class="sourceLineNo">256</span> return putIn(new HashMap<String, String>(values.length));<a name="line.256"></a> +<span class="sourceLineNo">257</span> }<a name="line.257"></a> +<span class="sourceLineNo">258</span><a name="line.258"></a> +<span class="sourceLineNo">259</span> /**<a name="line.259"></a> +<span class="sourceLineNo">260</span> * Returns a string representation of the contents of this record. The result is constructed by comment, mapping,<a name="line.260"></a> +<span class="sourceLineNo">261</span> * recordNumber and by passing the internal values array to {@link Arrays#toString(Object[])}.<a name="line.261"></a> +<span class="sourceLineNo">262</span> *<a name="line.262"></a> +<span class="sourceLineNo">263</span> * @return a String representation of this record.<a name="line.263"></a> +<span class="sourceLineNo">264</span> */<a name="line.264"></a> +<span class="sourceLineNo">265</span> @Override<a name="line.265"></a> +<span class="sourceLineNo">266</span> public String toString() {<a name="line.266"></a> +<span class="sourceLineNo">267</span> return "CSVRecord [comment=" + comment + ", mapping=" + mapping +<a name="line.267"></a> +<span class="sourceLineNo">268</span> ", recordNumber=" + recordNumber + ", values=" +<a name="line.268"></a> +<span class="sourceLineNo">269</span> Arrays.toString(values) + "]";<a name="line.269"></a> +<span class="sourceLineNo">270</span> }<a name="line.270"></a> +<span class="sourceLineNo">271</span><a name="line.271"></a> +<span class="sourceLineNo">272</span> String[] values() {<a name="line.272"></a> +<span class="sourceLineNo">273</span> return values;<a name="line.273"></a> +<span class="sourceLineNo">274</span> }<a name="line.274"></a> +<span class="sourceLineNo">275</span><a name="line.275"></a> +<span class="sourceLineNo">276</span>}<a name="line.276"></a> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +</pre> +</div> +</body> +</html> Added: websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/QuoteMode.html ============================================================================== --- websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/QuoteMode.html (added) +++ websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/src-html/org/apache/commons/csv/QuoteMode.html Mon Jan 29 17:25:21 2018 @@ -0,0 +1,123 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> +<title>Source code</title> +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style"> +</head> +<body> +<div class="sourceContainer"> +<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a> +<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a> +<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a> +<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a> +<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a> +<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a> +<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a> +<span class="sourceLineNo">008</span> *<a name="line.8"></a> +<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a> +<span class="sourceLineNo">010</span> *<a name="line.10"></a> +<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a> +<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a> +<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a> +<span class="sourceLineNo">014</span> * See the License for the specific language governing permissions and<a name="line.14"></a> +<span class="sourceLineNo">015</span> * limitations under the License.<a name="line.15"></a> +<span class="sourceLineNo">016</span> */<a name="line.16"></a> +<span class="sourceLineNo">017</span>package org.apache.commons.csv;<a name="line.17"></a> +<span class="sourceLineNo">018</span><a name="line.18"></a> +<span class="sourceLineNo">019</span>/**<a name="line.19"></a> +<span class="sourceLineNo">020</span> * Defines quote behavior when printing.<a name="line.20"></a> +<span class="sourceLineNo">021</span> *<a name="line.21"></a> +<span class="sourceLineNo">022</span> */<a name="line.22"></a> +<span class="sourceLineNo">023</span>public enum QuoteMode {<a name="line.23"></a> +<span class="sourceLineNo">024</span><a name="line.24"></a> +<span class="sourceLineNo">025</span> /**<a name="line.25"></a> +<span class="sourceLineNo">026</span> * Quotes all fields.<a name="line.26"></a> +<span class="sourceLineNo">027</span> */<a name="line.27"></a> +<span class="sourceLineNo">028</span> ALL,<a name="line.28"></a> +<span class="sourceLineNo">029</span><a name="line.29"></a> +<span class="sourceLineNo">030</span> /**<a name="line.30"></a> +<span class="sourceLineNo">031</span> * Quotes all non-null fields.<a name="line.31"></a> +<span class="sourceLineNo">032</span> */<a name="line.32"></a> +<span class="sourceLineNo">033</span> ALL_NON_NULL,<a name="line.33"></a> +<span class="sourceLineNo">034</span><a name="line.34"></a> +<span class="sourceLineNo">035</span> /**<a name="line.35"></a> +<span class="sourceLineNo">036</span> * Quotes fields which contain special characters such as a delimiter, quotes character or any of the characters in<a name="line.36"></a> +<span class="sourceLineNo">037</span> * line separator.<a name="line.37"></a> +<span class="sourceLineNo">038</span> */<a name="line.38"></a> +<span class="sourceLineNo">039</span> MINIMAL,<a name="line.39"></a> +<span class="sourceLineNo">040</span><a name="line.40"></a> +<span class="sourceLineNo">041</span> /**<a name="line.41"></a> +<span class="sourceLineNo">042</span> * Quotes all non-numeric fields.<a name="line.42"></a> +<span class="sourceLineNo">043</span> */<a name="line.43"></a> +<span class="sourceLineNo">044</span> NON_NUMERIC,<a name="line.44"></a> +<span class="sourceLineNo">045</span><a name="line.45"></a> +<span class="sourceLineNo">046</span> /**<a name="line.46"></a> +<span class="sourceLineNo">047</span> * Never quotes fields. When the delimiter occurs in data, the printer prefixes it with the current escape<a name="line.47"></a> +<span class="sourceLineNo">048</span> * character. If the escape character is not set, format validation throws an exception.<a name="line.48"></a> +<span class="sourceLineNo">049</span> */<a name="line.49"></a> +<span class="sourceLineNo">050</span> NONE<a name="line.50"></a> +<span class="sourceLineNo">051</span>}<a name="line.51"></a> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +</pre> +</div> +</body> +</html> Added: websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/stylesheet.css ============================================================================== --- websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/stylesheet.css (added) +++ websites/production/commons/content/proper/commons-csv/archives/1.5/apidocs/stylesheet.css Mon Jan 29 17:25:21 2018 @@ -0,0 +1,474 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ +body { + background-color:#ffffff; + color:#353833; + font-family:Arial, Helvetica, sans-serif; + font-size:76%; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4c6b87; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4c6b87; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-size:1.3em; +} +h1 { + font-size:1.8em; +} +h2 { + font-size:1.5em; +} +h3 { + font-size:1.4em; +} +h4 { + font-size:1.3em; +} +h5 { + font-size:1.2em; +} +h6 { + font-size:1.1em; +} +ul { + list-style-type:disc; +} +code, tt { + font-size:1.2em; +} +dt code { + font-size:1.2em; +} +table tr td dt code { + font-size:1.2em; + vertical-align:top; +} +sup { + font-size:.6em; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:.8em; + z-index:200; + margin-top:-7px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + background-image:url(resources/titlebar.gif); + background-position:left top; + background-repeat:no-repeat; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:1em; + margin:0; +} +.topNav { + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; +} +.bottomNav { + margin-top:10px; + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; +} +.subNav { + background-color:#dee3e9; + border-bottom:1px solid #9eadc0; + float:left; + width:100%; + overflow:hidden; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding:3px 6px; +} +ul.subNavList li{ + list-style:none; + float:left; + font-size:90%; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; +} +.navBarCell1Rev { + background-image:url(resources/tab.gif); + background-color:#a88834; + color:#FFFFFF; + margin: auto 5px; + border:1px solid #c9aa44; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader h1 { + font-size:1.3em; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 25px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:1.2em; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + margin:0 0 6px -8px; + padding:2px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + margin:0 0 6px -8px; + padding:2px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:1.0em; +} +.indexContainer h2 { + font-size:1.1em; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:1.1em; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:10px 0 10px 20px; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:25px; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #9eadc0; + background-color:#f9f9f9; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:1px solid #9eadc0; + border-top:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; + border-bottom:1px solid #9eadc0; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.contentContainer table, .classUseContainer table, .constantValuesContainer table { + border-bottom:1px solid #9eadc0; + width:100%; +} +.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table { + width:100%; +} +.contentContainer .description table, .contentContainer .details table { + border-bottom:none; +} +.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{ + vertical-align:top; + padding-right:20px; +} +.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast, +.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast, +.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne, +.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne { + padding-right:3px; +} +.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#FFFFFF; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + margin:0px; +} +caption a:link, caption a:hover, caption a:active, caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span { + white-space:nowrap; + padding-top:8px; + padding-left:8px; + display:block; + float:left; + background-image:url(resources/titlebar.gif); + height:18px; +} +.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd { + width:10px; + background-image:url(resources/titlebar_end.gif); + background-repeat:no-repeat; + background-position:top right; + position:relative; + float:left; +} +ul.blockList ul.blockList li.blockList table { + margin:0 0 12px 0px; + width:100%; +} +.tableSubHeadingColor { + background-color: #EEEEFF; +} +.altColor { + background-color:#eeeeef; +} +.rowColor { + background-color:#ffffff; +} +.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td { + text-align:left; + padding:3px 3px 3px 7px; +} +th.colFirst, th.colLast, th.colOne, .constantValuesContainer th { + background:#dee3e9; + border-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + text-align:left; + padding:3px 3px 3px 7px; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +td.colFirst, th.colFirst { + border-left:1px solid #9eadc0; + white-space:nowrap; +} +td.colLast, th.colLast { + border-right:1px solid #9eadc0; +} +td.colOne, th.colOne { + border-right:1px solid #9eadc0; + border-left:1px solid #9eadc0; +} +table.overviewSummary { + padding:0px; + margin-left:0px; +} +table.overviewSummary td.colFirst, table.overviewSummary th.colFirst, +table.overviewSummary td.colOne, table.overviewSummary th.colOne { + width:25%; + vertical-align:middle; +} +table.packageSummary td.colFirst, table.overviewSummary th.colFirst { + width:25%; + vertical-align:middle; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:.9em; +} +.block { + display:block; + margin:3px 0 0 0; +} +.strong { + font-weight:bold; +}
