Advertisement
badtrips

LabRab2 ComLineParser

Jun 21st, 2018
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. package labrab2;
  2.  
  3. public class ComLineParser {
  4.    
  5.     // массив строк для хранения ключей
  6.     String [] keys;
  7.     // массив строк для хранения разделителей
  8.     String [] delimeters;
  9.     // варианты завершения разбора командной строки
  10.     public enum SwitchStatus { NoError, Error, ShowUsage };
  11.  
  12.     public ComLineParser(String[] keys, String[] delimeters) {
  13.         this.keys = keys;
  14.         this.delimeters = delimeters;
  15.     }
  16.  
  17.     public ComLineParser(String[] keys) {
  18.         this(keys, new String[]{"/","-"});
  19.     }
  20.    
  21.     // выводит подсказку с форматом командной строки в случае ошибки
  22.     public void OnUsage(String errorKey){
  23.         if (errorKey != null) System.out.println(errorKey);
  24.         System.out.println("формат ком.строки: имяПрограммы [-r<input-fileName>] [-w<output-fileName>]");
  25.         System.out.println("   -?  показать Help файл");
  26.         System.out.println("   -r  задать имя входного файла");
  27.         System.out.println("   -w  выполнить вывод в указанный файл");
  28.     }
  29.    
  30.     // вызывается для каждого найденного ключа в командной строке - КОГДА ОН ВЫЗЫВАЕТСЯ?
  31.     public SwitchStatus OnSwitch(String key, String keyValue){
  32.         System.out.println("key: " + key + "; keyValue: " + keyValue);
  33.         return SwitchStatus.NoError;
  34.     }
  35.    
  36.     public boolean Parse(String [] args){
  37.         SwitchStatus ss = SwitchStatus.NoError;    
  38.         int argNum;
  39.         for (argNum = 0; (ss == SwitchStatus.NoError) && (argNum < args.length); argNum++) {
  40.            // провера наличия правильного разделителя
  41.             boolean isDelimeter = false;
  42.             for (int n = 0; !isDelimeter && (n < delimeters.length); n++) {
  43.                  isDelimeter = args[argNum].regionMatches(0,delimeters[n], 0, 1);
  44.             }
  45.             if (isDelimeter) {
  46.             // проверка наличия правильного ключа после правильного разделителя
  47.                 boolean isKey = false;
  48.                 int i;
  49.                 for (i = 0; !isKey && (i < keys.length); i++) {
  50.                     isKey = args[argNum].toUpperCase().regionMatches(1, keys[i].toUpperCase(), 0, 1);
  51.                     if (isKey) {
  52.                         // ИСПРАВИТЬ
  53.                         ss = OnSwitch(args[argNum].substring(0, 2),args[argNum].substring(2));
  54.                         break;
  55.                     }
  56.                 }
  57.                 if (!isKey) ss = SwitchStatus.Error;
  58.             }
  59.             else {
  60.                 ss=SwitchStatus.Error;
  61.                 break;
  62.             }
  63.         }
  64.         if (ss == SwitchStatus.ShowUsage)    OnUsage(null);
  65.         if (ss == SwitchStatus.Error)        OnUsage((argNum == args.length) ? null : args[argNum]);
  66.         return true;
  67.     }
  68.    
  69. }
  70.  
  71. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  72.  
  73. package labrab2;
  74.  
  75. public class LabRab2 {
  76.  
  77.     public static void main(String[] args) {
  78.         ComLineParser pars = new ComLineParser(new String[] {"?","r","w" });
  79.         pars.Parse(args);
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement