001package org.hl7.fhir.utilities; 002 003/*- 004 * #%L 005 * org.hl7.fhir.utilities 006 * %% 007 * Copyright (C) 2014 - 2019 Health Level 7 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023 024import java.io.IOException; 025import java.io.OutputStream; 026import java.io.UnsupportedEncodingException; 027 028public class CSVWriter extends TextStreamWriter { 029 030 public CSVWriter(OutputStream out) throws UnsupportedEncodingException { 031 super(out); 032 } 033 034 protected String csvEscape(String s) { 035 if (s==null) 036 return ""; 037 else if (s.contains("\"")) 038 return s.substring(0,s.indexOf("\"")) + "\"" + csvEscape(s.substring(s.indexOf("\"")+1)); 039 else if (s.contains(",")) 040 return "\""+s+"\""; 041 else 042 return s; 043 } 044 045 046 public void line(String... fields) throws IOException { 047 StringBuilder b = new StringBuilder(); 048 boolean first = true; 049 for (String s : fields) { 050 if (first) 051 first = false; 052 else 053 b.append(","); 054 b.append(csvEscape(s)); 055 } 056 ln(b.toString()); 057 } 058 059}