package ai.d.ai18; import drjava.util.Log; import drjava.util.StringUtil; import net.luaos.tb.tb15.CentralDatabase; import net.luaos.tb.tb20.Database; import net.luaos.tb.tb20.DatabaseAPI; import net.luaos.tb.tb20.FloraUtil; import net.luaos.tb.tb20.ListEntry; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GetDiskStats2 { public static void main(String[] args) { DatabaseAPI db = CentralDatabase.copyToMemory("df", "GetDiskStats2"); String dfOutputID1 = "#t1-kokjwjhpwuas-qbtsjoyahagl"; ListEntry dfOutput1 = db.get(dfOutputID1); ListEntry rowMarking = db.oneOfType_flex("RowMarking"); List<ListEntry> colMarkings = db.allOfType("ColMarking"); DatabaseAPI db2 = CentralDatabase.copyToMemory("df2", "GetDiskStats2"); ListEntry dfOutput2 = db2.oneOfType_flex("DFOutput"); /* (adapts to differing widths in a table. assumes spaces are used as field separator. looks only at one row.) function adaptColMarkings(text1, text2, rowMarking, colMarkings) row1 = text1.getRow(rowMarking) row2 = text2.getRow(rowMarking) cols1 = findColumns(row1) cols2 = findColumns(row2) newColMarkings = [] for colMarking in colMarkings: idx = cols1.indexOf(colMarking) col2 = cols2.get(idx) add col2 to newColMarkings with label of colMarking end return newColMarkings end */ String row1 = StringUtil.toLines(dfOutput1.desc).get(rowMarking.getInt("textRow")-1); String row2 = StringUtil.toLines(dfOutput2.desc).get(rowMarking.getInt("textRow")-1); List<String> cols1 = findColumns(row1); List<String> cols2 = findColumns(row2); Database dbOut = new Database(); for (ListEntry colMarking : colMarkings) { int idx = findColumn(cols1, colMarking.getPointer("textCol")); if (idx < 0) Log.surprise("Column not found: " + colMarking.desc); else dbOut.emit("ColMarking", colMarking.desc, "onText", dfOutput2.id, "textCol", cols2.get(idx)); } FloraUtil.copyNoRewriting(db2, dbOut); System.out.println("\nResult DB:"); FloraUtil.copyNoRewriting(db, dbOut, rowMarking.id); FloraUtil.printDatabase(dbOut); GetDiskStats.doIt(dbOut, dfOutput2.id); } private static int findColumn(List<String> cols, String textCol) { System.out.println("findColumn " + cols + " " + textCol); String start = textCol.split("\\-")[0]; for (int i = 0; i < cols.size(); i++) { String[] fromTo = cols.get(i).split("\\-"); if (rangeContains(fromTo, start)) return i; } return -1; } private static boolean rangeContains(String[] fromTo, String start) { if (Integer.parseInt(start) < Integer.parseInt(fromTo[0])) return false; if (fromTo[1].equals("end")) return true; else if (fromTo[1].endsWith(" (inc)")) return Integer.parseInt(start) <= Integer.parseInt(fromTo[1].substring(0, fromTo[1].length() - " (inc)".length())); else throw new RuntimeException("Unparsable range end: " + fromTo[1]); } private static List<String> findColumns(String row) { int i = 0; System.out.println("findColumns: " + row); Matcher matcher = Pattern.compile("[^ ]+").matcher(row); List<String> list = new ArrayList<String>(); while (matcher.find()) { int start = matcher.start(), end = matcher.end(); list.add((start+1) + "-" + end + " (inc)"); } return list; } }
Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Recognizer | Recognition Result | Visualize | Recalc |
---|---|---|---|
#308 | 3547 | [visualize] |
Snippet ID: | #285 |
Snippet name: | GetDiskStats2.java |
Eternal ID of this version: | #285/1 |
Text MD5: | 4677274266a67145f852012cd7d4cf63 |
Author: | stefan |
Category: | |
Type: | Java source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2014-11-08 22:25:28 |
Source code size: | 3547 bytes / 98 lines |
Pitched / IR pitched: | No / Yes |
Views / Downloads: | 811 / 198 |
Referenced in: | [show references] |