1. C# / Говнокод #12320

    +135

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    public static string GetCommandLineParameter(string ParameterName)
        {
          ParameterName = ParameterName.ToLower();
          string ParameterIdentifikator = ParameterName.ToLower() + "=";
          
          string RetVal = null;
          foreach(string Arg in Environment.GetCommandLineArgs())
          {
            string ArgLower = Arg.ToLower();
            if(ArgLower.IndexOf(ParameterIdentifikator) == 0)
            {
              RetVal = Arg.Substring(ParameterIdentifikator.Length, Arg.Length - ParameterIdentifikator.Length);
              return RetVal;
            }
          }
          return RetVal;
        }

    читаем параметры из командной строки

    Запостил: taburetka, 19 Декабря 2012

    Комментарии (13) RSS

    • А в сишарпике разве нет какого-нибудь аналога getopt'а из коробки?

      Ну а так - вполне рабочий код, разве что немного переусложненный:
      public static string GetCommandLineParameter(string ParameterName)
      {
          string ParameterIdentifikator = ParameterName.ToLower() + "=";
          foreach(string Arg in Environment.GetCommandLineArgs()) {
              if(Arg.ToLower.StartsWith(ParameterIdentifikator)) {
                  return Arg.Substring(ParameterIdentifikator.Length);
              }
          }
          return null;
      }
      Ответить
      • return Environment.
            GetCommandLineArgs().
            Single(s => s.ToLower().
            StartsWith(ParameterName.ToLower() + "=")).
            Skip(ParameterName.Length+1).
            AssParallel();

        Так параллельнее будет.
        Ответить
        • Не будет. AssParallel в таком случает нужно вызывать первым. Слив засчитан.
          Ответить
          • Но в конце смешнее же.
            Ответить
          • >AssParallel нужно вызывать первым
            Не нужно. В C# метода параллельной задницы даже не существует.
            Ответить
            • Видимо я не оценил вашего тонкого юмора и просто посмотрел на все это глазами разработчика, который увидел в коде одну опечатку и одну детскую логическую ошибку. Ну да ничего, вам простительно.
              Ответить
              • Просто вы тут явно новенький, но это ничего, свыкнетесь-освоитесь, со всеми говнами познакомитесь...
                Ответить
          • И еще "=".ToLower()
            Ну либо StartsWith(..., StringComparison.OrdinalIgnoreCase)
            Ответить
            • return Environment.
                  GetCommandLineArgs().
                  Single  (
                              s => s.StartsWith(ParameterName+"=", StringComparison.OrdinalIgnoreCase)
                          ).
                  Skip(ParameterName.Length+1);
              Посоветуй, как правильно отформатировать?
              Ответить
              • Не знаю, как правильно, я бы, наверное, написал так:
                return Environment.GetCommandLineArgs()
                    .Single(s => s.StartsWith(ParameterName + "=", StringComparison.OrdinalIgnoreCase))
                    .Substr(ParameterName.Length + 1);
                Ответить
                • А не будет исклЬючение если там 2 или больше одинаковых параметра в этом случае?
                  Ответить
                  • "throws an exception if more than one such element exists."
                    Видимо, у LispGovno это специально, как простейшая обработка некорректной конфигурации. Можно было написать First или Last, тогда бы в таком случае бралось первое и последнее значение.
                    Ответить

    Добавить комментарий