aboutsummaryrefslogtreecommitdiff
path: root/challenge-110/cheok-yin-fung/java/TransposeFile.java
diff options
context:
space:
mode:
author冯昶 <fengchang@novel-supertv.com>2021-05-03 18:31:36 +0800
committer冯昶 <fengchang@novel-supertv.com>2021-05-03 18:31:36 +0800
commit81252bda7fb7bcc9e9e153a6b3d268ab8c1a38c8 (patch)
treee4df369a6349802da33aa6d94b7fe745041a9955 /challenge-110/cheok-yin-fung/java/TransposeFile.java
parent0142974e5f11adadbaa7ca8d71de9db345318519 (diff)
parent0381a39b17ccd040302474f25d3c1cbbef703327 (diff)
downloadperlweeklychallenge-club-81252bda7fb7bcc9e9e153a6b3d268ab8c1a38c8.tar.gz
perlweeklychallenge-club-81252bda7fb7bcc9e9e153a6b3d268ab8c1a38c8.tar.bz2
perlweeklychallenge-club-81252bda7fb7bcc9e9e153a6b3d268ab8c1a38c8.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-110/cheok-yin-fung/java/TransposeFile.java')
-rw-r--r--challenge-110/cheok-yin-fung/java/TransposeFile.java94
1 files changed, 94 insertions, 0 deletions
diff --git a/challenge-110/cheok-yin-fung/java/TransposeFile.java b/challenge-110/cheok-yin-fung/java/TransposeFile.java
new file mode 100644
index 0000000000..438d070b47
--- /dev/null
+++ b/challenge-110/cheok-yin-fung/java/TransposeFile.java
@@ -0,0 +1,94 @@
+// The Weekly Challenge - 110
+// Task 2 Transpose File
+
+import java.io.File;
+import java.util.Scanner;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+
+// Usage: java TransposeFile [CSV file]
+
+public class TransposeFile
+{
+ private static int maxNumOfColOriginally = 1;
+ private static int numOfRowOriginally;
+ public static void main(String[] args) throws Exception
+ {
+ try {
+ File file = new File(args[0]);
+ Scanner sc = new Scanner(file);
+ ArrayList<ArrayList<String>> original = new ArrayList<>();
+ while (sc.hasNextLine()) {
+ String line = sc.nextLine();
+ ArrayList<String> row_in = new ArrayList<>();
+ row_in = parse(line.trim());
+ original.add(row_in);
+ }
+ numOfRowOriginally = original.size();
+
+ //For testing
+ /* System.out.println("Original File:");
+ for (ArrayList<String> row : original) {
+ for (String item : row)
+ System.out.println(item);
+ System.out.println("");
+ }
+ System.out.println("original rows num:" + numOfRowOriginally);
+ System.out.println("original max col num:" + maxNumOfColOriginally); */
+
+ int maxRow = maxNumOfColOriginally;
+ for (int i=0; i < maxRow; i++) {
+ if (original.get(0).size() > i )
+ System.out.print(original.get(0).get(i));
+ for (int k=1; k < numOfRowOriginally; k++) {
+ if (i < original.get(k).size() )
+ System.out.print("," + original.get(k).get(i));
+ else
+ System.out.print(",");
+ }
+ System.out.println();
+ }
+
+ } catch (FileNotFoundException e) {
+ System.out.println(e.getMessage());
+ System.exit(0);
+ } catch (IndexOutOfBoundsException e) {
+ System.out.println("Usage: java Transpose [CSV file]");
+ System.exit(0);
+ } catch (Exception e) {
+ System.out.println("Error(s) in input file.");
+ }
+ }
+
+ private static ArrayList<String> parse(String into)
+ {
+ ArrayList<String> group = new ArrayList<>();
+ String[] pre_group = into.split(",");
+ for (int j=0, i = 0; i < pre_group.length; ) {
+ j = i;
+ String term = pre_group[i];
+ if (pre_group[i].startsWith("\"") && !pre_group[i].endsWith("\"") ) {
+ do {
+ j = j+1;
+ term += "," + pre_group[j];
+ } while (!pre_group[j].endsWith("\"")) ;
+ group.add(term);
+ i = j+1;
+ } else if (pre_group[i].startsWith("\"") && pre_group[i].length() == 1) {
+ do {
+ j = j+1;
+ term += "," + pre_group[j];
+ } while (!pre_group[j].endsWith("\"")) ;
+ group.add(term);
+ i = j+1;
+ } else {
+ group.add(term);
+ i = i+1;
+ }
+ }
+ if (maxNumOfColOriginally < group.size())
+ maxNumOfColOriginally = group.size();
+ return group;
+ }
+
+}