Синтаксические анализаторы опции для C/C++? [дубликат]

Это полный код

import com.crystaldecisions.reports.formulas.FormulaFunction;
import com.crystaldecisions.reports.formulas.FormulaFunctionLibrary;



 public class BarcodeLibrary
   implements FormulaFunctionLibrary
 {
   private final FormulaFunction[] functionArray = {new Code39(), new Code39Ascii(), new CodeI2of5(), new Code2of5()
                                                    ,new CodeC128SetA(),new CodeEAN13()};

   public FormulaFunction getFunction(int functionNumber)
   {
     return this.functionArray[functionNumber];
   }

   public int size()
   {
    return this.functionArray.length;
  }
 }

*************************************************************************
import com.crystaldecisions.reports.common.CrystalResourcesFactory;
import com.crystaldecisions.reports.common.value.FormulaValue;
import com.crystaldecisions.reports.common.value.FormulaValueType;
import com.crystaldecisions.reports.common.value.StringValue;
import com.crystaldecisions.reports.formulas.FormulaFunction;
import com.crystaldecisions.reports.formulas.FormulaFunctionArgumentDefinition;
import com.crystaldecisions.reports.formulas.FormulaFunctionCallException;
import com.crystaldecisions.reports.formulas.FormulaValueReference;
import com.crystaldecisions.reports.formulas.SimpleFormulaFunctionArgumentDefinition;

public abstract class CodeEAN13Base
   implements FormulaFunction
 {
   FormulaFunctionArgumentDefinition[] myArguments = { SimpleFormulaFunctionArgumentDefinition.string };

protected CrystalResourcesFactory resCrystal;



  public CodeEAN13Base()
   {
     this.resCrystal = new CrystalResourcesFactory("Messages");

   }


  protected final String doTranslation(String inputData,String opz)

   {
    String returnVal = "";

     returnVal = returnVal + translateCharWrapper(inputData,opz);



    return returnVal;
   }


   @Override
   public final FormulaValue evaluate(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
  {

       StringValue dataStringArg = (StringValue)arguments[0].getFormulaValue();
       StringValue opzArg =(StringValue)arguments[1].getFormulaValue();

     String dataString = dataStringArg.getString();
     String opz=opzArg.getString();



    String returnVal = doTranslation(dataString,opz);

    return StringValue.fromString(returnVal);
   }

   @Override
   public final FormulaFunctionArgumentDefinition[] getArguments()
  {
     return this.myArguments;
  }

 @Override  
public final FormulaValueType getReturnType()
  {
     return FormulaValueType.string;
   }


   protected abstract String translate(String inputData,String opz)
   throws InvalidBarcodeDataException;

//protected abstract String translateChar(String inputData)
//throws InvalidBarcodeDataException;

 // private String translateCharWrapper(String inputData)
   private String translateCharWrapper(String inputData,String opz)
  {
     String returnString;

     try
    {
        // returnString = translateChar(inputData);
      returnString = translate(inputData,opz);
     } catch (InvalidBarcodeDataException e) {
      returnString = "";
     }

    return returnString;
  }

   @Override
   public void validateArgumentValues(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
   {}
 }

*************************************************************************
public class CodeEAN13
  extends CodeEAN13Base
{

    protected String opz;



   @Override
   public String getIdentifier()
   {
    return "barcodeean13";
  }



  private static String oddBar(String code) {

        return String.valueOf((char)(65+Integer.parseInt(code)));

    }

  private static String evenBar(String code) {

        return String.valueOf((char)(75+Integer.parseInt(code)));

    }





@Override
protected String translate(String inputData, String opz) throws InvalidBarcodeDataException {
    // TODO Auto-generated method stub
    Integer checkDigitSubtotal;
  String checkDigit;
      String temp = null;
      String code=inputData;
      String azalea_EAN13 = null;
      Object opzM=opz;

      if(!opzM.equals(null)) {
       code=code+opzM;
      }

      //Calculate the EAN-13 check digit.

      checkDigitSubtotal=3*(Integer.parseInt(code.substring(1, 2))+Integer.parseInt(code.substring(3, 4))+Integer.parseInt(code.substring(5, 6))
                           +Integer.parseInt(code.substring(7, 8))+Integer.parseInt(code.substring(9, 10))
                           +Integer.parseInt(code.substring(code.length()-1)));


  checkDigitSubtotal=checkDigitSubtotal+(Integer.parseInt(code.substring(0,1))+Integer.parseInt(code.substring(2, 3))
                                       +Integer.parseInt(code.substring(4, 5))+Integer.parseInt(code.substring(6, 7))
                                       +Integer.parseInt(code.substring(8, 9))+Integer.parseInt(code.substring(10, 11)));

  checkDigit=String.valueOf(300-checkDigitSubtotal);
  checkDigit=checkDigit.substring(checkDigit.length()-1);



 // Begin building the output string with the 1st character's human-readable, L guard bars & odd parity of 1st digit
   temp=(char)(194+Integer.parseInt(code.substring(0,1)))+"x"+oddBar(code.substring(1, 2));  

  // Build the remainder of left half of symbol's parity is based on 1st digit
   switch (code.substring(0,1)) {
   case "0":
      {
         temp=temp+oddBar(code.substring(2, 3));
         temp=temp+oddBar(code.substring(3, 4));
         temp=temp+oddBar(code.substring(4, 5));
         temp=temp+oddBar(code.substring(5, 6));
         temp=temp+oddBar(code.substring(6, 7));         
      }
    break;
   case "1":
      {
          temp=temp+oddBar(code.substring(2, 3)); 
          temp=temp+evenBar(code.substring(3, 4));
          temp=temp+oddBar(code.substring(4, 5));
          temp=temp+evenBar(code.substring(5, 6));
          temp=temp+evenBar(code.substring(6, 7));
      }
      break;
   case "2":
   {
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));
   }
   break;
   case "3":
   {
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));
   }
    break;
   case "4":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "5":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "6":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "7":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));



   }
   break;
   case "8":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "9":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;

    default:
   }

////Add the center guard bars & the build right half of symbol using set C (0-9)

    return azalea_EAN13;
   }


 }


.
12
задан Community 23 May 2017 в 10:27
поделиться

6 ответов

Если Вы хотите что-то абсолютно межплатформенное, я нашел Повышение:: библиотека Program_Options, чтобы быть очень хорошим. Существует что-то вроде кривой обучения к установке его, но после того как Вы осваиваете это, это упрощает вещи значительно.

18
ответ дан 2 December 2019 в 03:39
поделиться

также существуют popt.

2
ответ дан 2 December 2019 в 03:39
поделиться

повышение:: program_options довольно хорош и имеет хороший интерфейс C++, который может проверить, что опциональные параметры имеют определенный тип (как 'интервал') и хранят их непосредственно в переменные.

Это также поддерживает для загрузки "опций" из файла конфигурации, таким образом, Вы получаете синтаксический анализатор файла конфигурации бесплатно. Таким образом, можно очень легко позволить переопределять все параметры конфигурации из командной строки или добавлять все параметры командной строки к файлу конфигурации, который делает ее очень гибкой.

6
ответ дан 2 December 2019 в 03:39
поделиться

Во многих целях, GNU getopt() и getopt_long() функции являются хорошим выбором.

GNU getopt() для однобуквенных аргументов опции и рубит справедливо близко к поведению стандарта POSIX и может быть убежден вести себя более православным образом путем установки переменной среды POSIXLY_CORRECT. Различием является тот GNU getopt() распознает аргументы опции после первого аргумента неопции и переставляет аргументы так, чтобы все аргументы опции были обработаны перед любым из аргументов неопции. Это иногда имеет значение - хотя контексты имеют тенденцию быть немного тайными. Существует несколько других дополнительных доступных приемов.

GNU getopt_long() лучший механизм для контакта с длинными опциями такой как --help. Это может обработать дополнительные аргументы, соответствуя однобуквенным опциям и всем видам вещей.

Существуют многочисленные другие пакеты, доступные, которые обрабатывают опции различными способами.

(Perl имеет множество модулей Getopt, отражаясь, сколько усилия было вставлено за эти годы.)

Вы могли бы найти некоторую полезную дополнительную информацию в том, Что является общим синтаксисом команды оболочки Unix. Можно также считать спецификацию POSIX для конвенций командной строки в Служебной главе Конвенций.

13
ответ дан 2 December 2019 в 03:39
поделиться

если Вы используете linux/unix затем getopt, синтаксический анализатор опции для Вас это. продолжает работать почти все разновидности Unix и прост в использовании

1
ответ дан 2 December 2019 в 03:39
поделиться

Я использую внедрение систем getopt_long () для большинства вещей, однако Вы, возможно, должны были бы быть более портативными, который запрещает использование таких благ цивилизации POSIX.

Вот стандарт относительно представления POSIX параметров командной строки, если Вы в состоянии, где getopt () / getopt_long () просто не доступны и нуждаются к самокрутке. Вы могли бы также хотеть взгляд на то, что POSIX должен сказать о справке / сводные дисплеи опции (я не могу найти ссылку на ту часть стандарта от руки).

Лично, мне не нравится использовать программы, которые не берут - длинные опции, потому что запоминание коротких опций является болью, и никакие две программы не используют то же.

1
ответ дан 2 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: