summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-01-03 18:36:06 -0400
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-01-03 18:36:06 -0400
commit4cb3e2d6c9362a2cc48d83ce849fda0dcf217fa2 (patch)
tree3c0c2945c43a9e928b8cebd5cd084acd7733f358 /src
parent734ce05c6832eb176d035568665b07c091c53e2a (diff)
Add file group support
Adds support for arranging files into groups. This may not be the final way this feature looks, but it works.
Diffstat (limited to 'src')
-rw-r--r--src/AffixLister.java58
1 files changed, 52 insertions, 6 deletions
diff --git a/src/AffixLister.java b/src/AffixLister.java
index 44170ca6..33eff9d8 100644
--- a/src/AffixLister.java
+++ b/src/AffixLister.java
@@ -596,18 +596,38 @@ public class AffixLister {
NAMED;
}
- private static void readNamesFromFile(List<String> fNames, String from) {
+ private static int readNamesFromFile(Map<String, List<String>> fNames, String from, String defGroup) {
+ int numFiles = 0;
try (FileReader fr = new FileReader(from)) {
Scanner scn = new Scanner(fr);
+ String curGroup = defGroup;
+ List<String> curList = fNames.get(curGroup);
+
while (scn.hasNextLine()) {
- fNames.add(scn.nextLine());
+ String ln = scn.nextLine();
+
+ if (ln.startsWith("#")) {
+ curGroup = ln.substring(1);
+
+ if (!fNames.containsKey(curGroup)) {
+ curList = new ArrayList<>();
+ fNames.put(curGroup, curList);
+ } else {
+ curList = fNames.get(curGroup);
+ }
+ }
+
+ numFiles += 1;
+ curList.add(ln);
}
} catch (IOException ioex) {
System.err.printf("Error reading names from file %s\n", from);
ioex.printStackTrace();
System.err.println();
}
+
+ return numFiles;
}
/**
* Main method.
@@ -624,6 +644,8 @@ public class AffixLister {
long startTime = System.nanoTime();
+ int fCount = 0;
+
int namedCount = 0;
int unnamedCount = 0;
int zeroCount = 0;
@@ -635,8 +657,11 @@ public class AffixLister {
int argCount = 0;
+ Map<String, List<String>> fGroups = new HashMap<>();
List<String> fNames = new ArrayList<>();
+ String curGroup = "default";
+ fGroups.put(curGroup, fNames);
for(int i = 0; i < args.length; i++) {
String fName = args[i];
@@ -687,14 +712,29 @@ public class AffixLister {
nameMode = NameMode.valueOf(args[++i].toUpperCase());
break;
+ case "--file-group":
+ case "-g":
+ if (i + 1 >= args.length) {
+ System.err.printf("ERROR: file group argument requires the group name to use be specified\n");
+ break;
+ }
+
+ curGroup = args[++i];
+ if (fGroups.containsKey(curGroup)) {
+ fNames = fGroups.get(curGroup);
+ } else {
+ fNames = new ArrayList<>();
+ fGroups.put(curGroup, fNames);
+ }
+ break;
case "--read-names-from-file":
case "-r":
if (i + 1 >= args.length) {
- System.err.printf("ERROR: name mode argument requires the mode to use be specified (all, unnamed or named)\n");
+ System.err.printf("ERROR: read name file argument requires the file to use be specified\n");
break;
}
- readNamesFromFile(fNames, args[++i]);
+ fCount += readNamesFromFile(fGroups, args[++i], curGroup);
break;
default:
isArg = false;
@@ -705,13 +745,17 @@ public class AffixLister {
continue;
}
+ fCount += 1;
fNames.add(fName);
} else {
+ fCount += 1;
fNames.add(fName);
}
}
- for (String fName : fNames) {
+ for (Entry<String, List<String>> fGroup : fGroups.entrySet()) {
+ System.out.printf("\nFile Group '%s' starting\n", fGroup.getKey());
+ for (String fName : fGroup.getValue()) {
try (FileReader fr = new FileReader(fName)) {
Scanner sc = new Scanner(fr);
@@ -764,6 +808,8 @@ public class AffixLister {
System.err.println();
}
}
+ System.out.printf("\nFile Group '%s' ending\n", fGroup.getKey());
+ }
System.err.println("\nGroup Contents: ");
for (Entry<String, List<String>> ent: groupContents.entrySet()) {
@@ -773,7 +819,7 @@ public class AffixLister {
System.err.println();
long endTime = System.nanoTime();
- System.err.printf("\nProcessed %,d affixes (%,d named, %,d unnamed, %,d zero-weight) (%,d effects) (%,d distinct groups, %,d actual groups, %,d nongrouped affixes) out of %,d files in %,d nanoseconds (%.2f seconds)\n", fNames.size(), namedCount, unnamedCount, zeroCount, effectCount, groupCount, groupContents.size(), nonGroupContents.size(), fNames.size(), endTime - startTime, ((double)(endTime - startTime) / 1000000000));
+ System.err.printf("\nProcessed %,d affixes (%,d named, %,d unnamed, %,d zero-weight) (%,d effects) (%,d distinct groups, %,d actual groups, %,d nongrouped affixes) out of %,d files (%,d groups) in %,d nanoseconds (%.2f seconds)\n", fCount, namedCount, unnamedCount, zeroCount, effectCount, groupCount, groupContents.size(), nonGroupContents.size(), fCount, fGroups.size(), endTime - startTime, ((double)(endTime - startTime) / 1000000000));
System.err.printf("\tOptions: Name Mode: %s, Special-case zero weight: %s, Noting zero-weight in special case: %s\n", nameMode, !listZeros, !omitZeros);
}