convertASCII in Java worgtsone.scienceontheweb.com - mailto: worgtsone @ hush.com 2013-07-18 – 18. Juli 2013 Inhaltsverzeichnis 1 Intro 1 2 convertHin 2 3 convertHer 3 Disclaimer Wissen ist zum Teilen da. Ich teile mein Wissen mit Ihnen, lieber Kollege. Ich bin aber nicht perfekt. Unter [email protected] nehme ich dankbar Ihre Verbesserungsvorschläge entgegen. * Legal Blurb: Alle Informationen in diesem Dokument sind falsch, unvolständig, irreführend, irrelevant und / oder funktionieren einfach nicht. Wenn Sie es trotzdem benutzen, und es geht dabei etwas kaputt, ist das Ihr Problem, nicht meins. * Bitte teilen Sie meine Web-Adresse nicht Ihren Schülern mit. 1 Intro Java kann toll Dateien lesen, verarbeiten und wieder ausgeben. Wenn allerdings exotisch kodierte Umlaute dadrin sind, macht es sie unrettbar kaputt. * Weil mich das nervt, habe ich convertHin geschrieben, das nimmt die Datei Byte für Byte, und wenn es ein böses Byte >127 findet, zB 133 schreibt es in den Ausgabe-Stream: \\133\\ * Rückwärts sollte das auch gehen, wie wärs mit convertHer. Das nimmt genau diese Backslashgeschichten und wandelt sie zurück in 1 Byte. 1 2 2 CONVERTHIN convertHin import java.io.*; // die kodierung der umlaute in dieser datei ist merkwürdig... // also muß ich sie als stream lesen, byteweise. // die original-datei enthaelt keine \, also kann ich die zum Absetzen der // Umlaute nehmen. // FALLS DIE ORIGINAL-DATEI DAS TRENNZEICHEN ENTHAELT, MUSS MAN EIN ANDERES NEHMEN!!! class convertHin { public static void main (String[]args) throws Exception { FileInputStream fis = new FileInputStream ("start.csv"); FileOutputStream fos = new FileOutputStream("start-convert.csv"); byte b; int i; i=fis.read(); while (i>0) { // System.out.println ((char)i+"-"+i); if (i>127) { String s="\\\\"+i+"\\\\"; fos.write( s.getBytes() ); }else{ fos.write(i); } i=fis.read(); } fis.close(); fos.close(); // System.out.println ("Datei zu Ende, i="+i); } } // FALLS DIE ORIGINAL-DATEI DAS TRENNZEICHEN ENTHAELT, MUSS MAN EIN ANDERES NEHMEN!!! 2 3 3 CONVERTHER convertHer import java.io.*; // FALLS DIE ORIGINAL-DATEI DAS TRENNZEICHEN ENTHAELT, MUSS MAN EIN ANDERES NEHMEN!!! class convertHer { public static void main (String[]args) throws Exception { FileInputStream fis = new FileInputStream ("out-convert.csv"); FileOutputStream fos = new FileOutputStream("out.csv"); byte b; int i; i=fis.read(); while (i>0) { // System.out.println ((char)i+"-"+i); String istEsEinBackslash=""+(char)i; if (istEsEinBackslash.equals("\\")) { System.out.println ("Found a backslash, i="+i); i=fis.read(); // noch ein \ System.out.println ("Found a backslash, i="+i); i=fis.read()-48; // hunderter System.out.println ("Found hunderter, i="+i); int j=i*10; i=fis.read()-48; // zehner System.out.println ("Found zehner, i="+i); j=j+i; j=j*10; i=fis.read()-48; // einer System.out.println ("Found einer, i="+i); j+=i; System.out.println ("Schreibe j="+j); i=fis.read(); // noch ein \ i=fis.read(); // noch ein \ fos.write(j); }else{ fos.write(i); } i=fis.read(); } fis.close(); fos.close(); // System.out.println ("Datei zu Ende, i="+i); } } // FALLS DIE ORIGINAL-DATEI DAS TRENNZEICHEN ENTHAELT, MUSS MAN EIN ANDERES NEHMEN!!! 3