Positional Arguments ব্যবস্থাপনা

অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) - Java Technologies

271

Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য বেশ শক্তিশালী, কিন্তু এটি বিশেষত Positional Arguments বা অবস্থানগত আর্গুমেন্ট (যা সাধারণত অর্ডার অনুযায়ী আর্গুমেন্টগুলি নির্দেশ করে) হ্যান্ডল করতে সহায়তা করে। অবস্থানগত আর্গুমেন্টগুলি এমন আর্গুমেন্ট যেগুলির আংশিক বা পূর্ণ মান ব্যবহারকারীর কমান্ডের মধ্যে নির্দিষ্ট অবস্থানে থাকে। এগুলির কোনো অপশন নাম বা ফ্ল্যাগ থাকে না, বরং কেবল একটি নির্দিষ্ট স্থান থাকে।

এই ধরণের আর্গুমেন্টগুলি সাধারাণত অ্যাপ্লিকেশনের জন্য আবশ্যক ইনপুট হিসেবে ব্যবহার হয়, যেমন ফাইল নাম, ডেটা পাথ বা অন্যান্য তথ্য।


Positional Arguments কী?

Positional Arguments হল আর্গুমেন্টগুলি যা কমান্ড লাইন স্ট্রিংয়ে নির্দিষ্ট অবস্থানে থাকে। উদাহরণস্বরূপ, একটি ফাইল পাথ বা ডেটা উৎস যা কোনও অপশন বা ফ্ল্যাগ দিয়ে চিহ্নিত হয় না, কিন্তু এটি একটি নির্দিষ্ট অবস্থানে থাকে।

যেমন:

java MyApp input.txt output.txt

এখানে, input.txt এবং output.txt হল Positional Arguments। এগুলি কোনো ফ্ল্যাগ বা অপশন নয়, বরং সঠিক অর্ডারে নির্দিষ্ট মান সরবরাহ করছে।


Apache Commons CLI দিয়ে Positional Arguments পরিচালনা

Apache Commons CLI-এর মাধ্যমে Positional Arguments এর ব্যবস্থাপনা করা বেশ সহজ। আপনি args[] এর মাধ্যমে সাধারণভাবে আর্গুমেন্টগুলো গ্রহণ করতে পারেন এবং তাদের পজিশন অনুসারে ম্যানিপুলেট করতে পারেন।

Step 1: Positional Arguments Handling উদাহরণ

নীচে একটি উদাহরণ দেওয়া হলো যেখানে অ্যাপ্লিকেশন দুটি Positional Arguments গ্রহণ করবে: inputFile এবং outputFile

import org.apache.commons.cli.*;

public class PositionalArgumentsExample {
    public static void main(String[] args) {
        // অপশন বিল্ডার তৈরি
        Options options = new Options();

        // কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য পজার
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            cmd = parser.parse(options, args);

            // positional arguments রিট্রিভ করা
            if (args.length < 2) {
                System.out.println("Usage: java PositionalArgumentsExample <inputFile> <outputFile>");
                return;
            }

            // প্রথম আর্গুমেন্ট হল ইনপুট ফাইল
            String inputFile = args[0];

            // দ্বিতীয় আর্গুমেন্ট হল আউটপুট ফাইল
            String outputFile = args[1];

            // আর্গুমেন্ট আউটপুট করা
            System.out.println("Input File: " + inputFile);
            System.out.println("Output File: " + outputFile);

        } catch (ParseException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

কোডের ব্যাখ্যা:

  1. Options Object: এখানে কোন অপশন (যেমন -n, -a) তৈরি করা হয়নি, কারণ এটি একটি Positional Arguments উদাহরণ।
  2. Positional Arguments: আর্গুমেন্টগুলো সরাসরি args[] অ্যারের মাধ্যমে এক্সেস করা হচ্ছে, যেখানে প্রথম আর্গুমেন্টটি inputFile এবং দ্বিতীয়টি outputFile হিসেবে ব্যবহার করা হবে।

Step 2: কমান্ড লাইন আর্গুমেন্ট পাস করা

এই প্রোগ্রামটি চালানোর সময়, আপনি inputFile এবং outputFile আর্গুমেন্ট দুটি নির্দিষ্ট স্থানে প্রদান করবেন:

java PositionalArgumentsExample input.txt output.txt

তাহলে আউটপুট হবে:

Input File: input.txt
Output File: output.txt

এখানে, input.txt এবং output.txt হল Positional Arguments। এগুলি যথাক্রমে ইনপুট এবং আউটপুট ফাইল হিসাবে ব্যবহৃত হয়েছে।


Positional Arguments Validation

প্রায়শই আপনি চাইবেন যে কমান্ড লাইন আর্গুমেন্টগুলি সঠিকভাবে পাস হয়েছে কিনা তা যাচাই করতে। Apache Commons CLI এ আপনি Positional Arguments এর জন্য প্রয়োজনীয় ভ্যালিডেশনও করতে পারেন, যাতে ব্যবহারকারী সঠিক সংখ্যা এবং টাইপের আর্গুমেন্ট পাস করেন।

Validation Example

import org.apache.commons.cli.*;

public class PositionalArgumentsValidation {
    public static void main(String[] args) {
        // কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য পজার
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        // ভ্যালিডেশন চেক
        if (args.length < 2) {
            System.out.println("Error: You must provide both input and output files.");
            System.out.println("Usage: java PositionalArgumentsValidation <inputFile> <outputFile>");
            return;
        }

        // positional arguments রিট্রিভ করা
        String inputFile = args[0];
        String outputFile = args[1];

        // আর্গুমেন্ট আউটপুট করা
        System.out.println("Input File: " + inputFile);
        System.out.println("Output File: " + outputFile);
    }
}

এখানে, যদি ইনপুট আর্গুমেন্টের সংখ্যা দুইটির কম থাকে, তাহলে ত্রুটি বার্তা দেখানো হবে এবং সঠিক ব্যবহার পদ্ধতি জানানো হবে।


Positional Arguments এর বিশেষত্ব

  • No Flags: পজিশনাল আর্গুমেন্টগুলির কোনো ফ্ল্যাগ বা অপশন থাকে না (যেমন -n, -a ইত্যাদি), এগুলি শুধুমাত্র নির্দিষ্ট স্থানে দেওয়া আর্গুমেন্ট।
  • Order-Dependent: পজিশনাল আর্গুমেন্টগুলি সাধারণত অবস্থান অনুযায়ী নির্ধারিত হয়। অর্থাৎ, প্রথম আর্গুমেন্টটি সাধারণত ইনপুট ফাইল বা ডেটা, দ্বিতীয়টি আউটপুট ফাইল বা অন্য কোন প্যারামিটার হতে পারে।
  • Simple Input: এগুলি সাধারণত ফাইল পাথ বা ডেটা পাথের মতো ইনপুট প্যারামিটার হিসেবে ব্যবহৃত হয়।

সারাংশ

Apache Commons CLI লাইব্রেরি দিয়ে Positional Arguments-এর ব্যবস্থাপনা সহজ করা যায়। পজিশনাল আর্গুমেন্টগুলি কমান্ড লাইন আর্গুমেন্টের মধ্যে নির্দিষ্ট অবস্থানে থাকে এবং এগুলির মাধ্যমে ইনপুট ডেটা বা প্যারামিটার গ্রহণ করা হয়। Apache Commons CLI ব্যবহার করে আপনি পজিশনাল আর্গুমেন্টগুলো সহজেই গ্রহণ, যাচাই এবং প্রক্রিয়া করতে পারেন।

Content added By

কমান্ড লাইন অ্যাপ্লিকেশন বা স্ক্রিপ্ট তৈরি করার সময়, কিছু আর্গুমেন্ট নির্দিষ্ট অবস্থানে (position) প্রদান করা হয়, যেগুলো সাধারণত Positional Arguments হিসেবে পরিচিত। এটি এমন আর্গুমেন্ট যা কোনো নির্দিষ্ট অপশন বা ফ্ল্যাগ ছাড়া সরাসরি কমান্ড লাইন আর্গুমেন্টগুলোর মধ্যে পাস করা হয়। প্রোগ্রামটি আর্গুমেন্টের অবস্থান অনুযায়ী তাদের পার্স করে এবং সংশ্লিষ্ট তথ্য ব্যবহার করে। অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) লাইব্রেরি এই ধরনের আর্গুমেন্ট পরিচালনা করার জন্য সরল এবং কার্যকরী উপায় প্রদান করে।

Positional Arguments এর গুরুত্ব:

  • সহজ এবং স্বাভাবিক ইনপুট: যখন একটি অ্যাপ্লিকেশন নির্দিষ্ট অর্ডারে আর্গুমেন্ট নিতে চায় এবং কোনো অপশন বা ফ্ল্যাগ ব্যবহার না করেই ইনপুট প্রাপ্তি নিশ্চিত করতে চায়, তখন positional arguments ব্যবহৃত হয়।
  • ফ্ল্যাট আর্গুমেন্ট সিস্টেম: এতে ব্যবহারকারীকে অপশন টাইপ বা ডিফাইন করতে হয় না, শুধু নির্দিষ্ট স্থানে আর্গুমেন্ট প্রদান করা হয়।

Positional Arguments এর ধারণা

Positional Arguments হলো সেই আর্গুমেন্ট যা কমান্ড লাইন অ্যাপ্লিকেশন বা স্ক্রিপ্টে নির্দিষ্ট অবস্থানে প্রদান করা হয়, কোনো ফ্ল্যাগ বা অপশন ছাড়াই। সাধারণত এগুলো শেষের দিকে বা নির্দিষ্ট অর্ডারে পাস করা হয়। অ্যাপাচি কমন্স সিআলআই-এ, positional arguments কোডের মধ্যে অ্যারে বা লিস্ট হিসেবে পাস করা হয় এবং এই আর্গুমেন্টগুলির কোনো নাম বা ফ্ল্যাগ থাকে না।

যেমন, একটি কমান্ডের মধ্যে সাধারণত নাম, ফাইল পাথ, ডেটা ভ্যালু, অথবা অন্য কোনো ইনপুট প্যারামিটার পাস করা হয় যা একটি নির্দিষ্ট অর্ডারে থাকে।

উদাহরণ:

ধরা যাক, একটি কমান্ড লাইন অ্যাপ্লিকেশন যা দুটি positional arguments নেয়: ব্যবহারকারীর নাম এবং বয়স। এরকম একটি অ্যাপ্লিকেশন নিম্নলিখিতভাবে কাজ করতে পারে:

java MyApp John 25

এখানে:

  • John হলো positional argument (ব্যবহারকারীর নাম)।
  • 25 হলো positional argument (ব্যবহারকারীর বয়স)।

অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) দিয়ে Positional Arguments এর ব্যবহার

অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) লাইব্রেরিতে positional arguments ব্যবহার করার জন্য, আপনাকে একটি নির্দিষ্ট পদ্ধতি অনুসরণ করতে হয় যেখানে অপশনগুলো তৈরি করা হয় না এবং আর্গুমেন্টের অবস্থান অনুযায়ী ডেটা গ্রহণ করা হয়।

নিচে একটি উদাহরণ দেওয়া হলো যেখানে দুটি positional argument পাস করা হচ্ছে: নাম এবং বয়স।

উদাহরণ: Positional Arguments ব্যবহার

import org.apache.commons.cli.*;

public class PositionalArgumentsExample {
    public static void main(String[] args) {
        // অপশন তৈরি করা
        Options options = new Options();
        
        // কমান্ড লাইন পার্সার তৈরি করা
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // কমান্ড লাইন আর্গুমেন্টস পার্স করা
            cmd = parser.parse(options, args);
            
            // Positional Arguments সঠিকভাবে গ্রহণ করা
            if (args.length >= 2) {
                String name = args[0];  // প্রথম আর্গুমেন্ট (নাম)
                String age = args[1];   // দ্বিতীয় আর্গুমেন্ট (বয়স)
                
                System.out.println("Name: " + name);
                System.out.println("Age: " + age);
            } else {
                System.out.println("Please provide both name and age.");
            }
        } catch (ParseException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

চলানোর উদাহরণ:

java PositionalArgumentsExample John 25

এখানে, John হলো প্রথম positional argument (নাম) এবং 25 হলো দ্বিতীয় positional argument (বয়স)। প্রোগ্রামটি এই আর্গুমেন্টগুলিকে গ্রহণ করে এবং আউটপুট হিসেবে প্রদর্শন করবে:

Name: John
Age: 25

Positional Arguments এর সুবিধা

১. সরলতা

Positional arguments ব্যবহারের মাধ্যমে কমান্ড লাইন আর্গুমেন্টস সরল এবং পরিষ্কার থাকে। ব্যবহারকারী শুধু সঠিক অর্ডারে আর্গুমেন্ট পাস করে অ্যাপ্লিকেশন চালাতে পারে, যা কিছু অপশন বা ফ্ল্যাগের তুলনায় সহজ।

২. নির্দিষ্ট অর্ডার

কিছু অ্যাপ্লিকেশনে আর্গুমেন্টগুলির নির্দিষ্ট অর্ডার থাকতে পারে, এবং positional arguments ব্যবহার করা হলে এই অর্ডার বজায় রাখা সহজ হয়। যেমন, একটি ফাইল আপলোডের জন্য প্রথম আর্গুমেন্ট হিসেবে ফাইলের পাথ এবং দ্বিতীয় আর্গুমেন্ট হিসেবে আউটপুট ডিরেক্টরি দেওয়া হতে পারে।

৩. অপশন ও আর্গুমেন্টের ফ্ল্যাট সিস্টেম

Positional arguments এর মাধ্যমে আপনি একটি ফ্ল্যাট আর্গুমেন্ট সিস্টেম তৈরি করতে পারেন যেখানে কমান্ড লাইন আর্গুমেন্টস কোনো অপশন নাম ছাড়াই সরাসরি পাস করা হয়।


সারাংশ

Positional arguments হলো সেই আর্গুমেন্ট যা নির্দিষ্ট অবস্থানে পাস করা হয় এবং এগুলোর কোনো অপশন বা ফ্ল্যাগ থাকে না। এটি কমান্ড লাইন অ্যাপ্লিকেশন বা স্ক্রিপ্টগুলোর জন্য একটি সহজ এবং ফ্ল্যাট আর্গুমেন্ট সিস্টেম সরবরাহ করে। অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) লাইব্রেরি positional arguments পরিচালনা এবং গ্রহণ করার জন্য একটি সোজা উপায় প্রদান করে, যা অ্যাপ্লিকেশন তৈরি করার সময় প্রোগ্রামের কার্যক্রম সহজ এবং পরিষ্কার রাখতে সাহায্য করে।

Content added By

Apache Commons CLI লাইব্রেরি ব্যবহার করে আপনি Non-option arguments (যেগুলি অপশন বা আর্গুমেন্ট চিহ্নের (যেমন -f বা --file) ছাড়াই সরাসরি ইনপুট হিসেবে প্রদান করা হয়) সহজেই হ্যান্ডল করতে পারেন। এগুলি সাধারণত পজিশনাল আর্গুমেন্ট (যেমন ইনপুট ফাইল বা আউটপুট ডিরেক্টরি) হয়ে থাকে এবং কোনও বিশেষ ফ্ল্যাগ ছাড়াই সরাসরি কমান্ড লাইন থেকে প্রদান করা হয়।

Non-option arguments সাধারণত একটি অ্যাপ্লিকেশনে অপরিহার্য ইনপুট বা নির্দেশনা হিসেবে ব্যবহৃত হয়, এবং Apache Commons CLI এ এটি CommandLine.getArgs() ব্যবহার করে হ্যান্ডল করা হয়। এই ফিচারটি আপনার CLI অ্যাপ্লিকেশনটি আরও নমনীয় এবং সহজ ব্যবহারযোগ্য করে তোলে।

Non-option Arguments হ্যান্ডল করার পদ্ধতি

এখানে আমরা দেখব কিভাবে Non-option arguments হ্যান্ডল করতে হয় এবং কিভাবে তা CLI প্রোগ্রামে ব্যবহৃত হয়।


১. Maven Dependency:

প্রথমে, যদি আপনি Maven ব্যবহার করেন, তবে আপনার pom.xml ফাইলে Apache Commons CLI ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.4</version>
</dependency>

২. Non-option Arguments Example:

এখন, আমরা একটি উদাহরণ দেখব যেখানে আমরা Non-option arguments হ্যান্ডল করছি। ধরুন, আমাদের একটি অ্যাপ্লিকেশন আছে যা প্রথম ইনপুট আর্গুমেন্ট হিসেবে একটি ইনপুট ফাইল নেবে এবং দ্বিতীয় ইনপুট আর্গুমেন্ট হিসেবে আউটপুট ডিরেক্টরি নেবে। এগুলি Non-option arguments হিসেবে কাজ করবে।

import org.apache.commons.cli.*;

public class NonOptionArgumentExample {

    public static void main(String[] args) {
        // অপশন কনফিগারেশন
        Options options = new Options();

        // ইনপুট ফাইল অপশন (Required)
        Option inputFile = new Option("f", "file", true, "Input file path");
        inputFile.setRequired(true);  // এটি একটি Required অপশন
        options.addOption(inputFile);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্সিং
            cmd = parser.parse(options, args);

            // ইনপুট ফাইল নাম গ্রহণ
            String input = cmd.getOptionValue("f");
            System.out.println("Input file: " + input);

            // Non-option arguments প্রক্রিয়া করা
            String[] nonOptionArgs = cmd.getArgs();  // Non-option arguments
            for (String arg : nonOptionArgs) {
                System.out.println("Non-option argument: " + arg);
            }

        } catch (ParseException e) {
            // যদি Required আর্গুমেন্ট না দেওয়া হয়
            System.err.println("Error: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("NonOptionArgumentExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Option Object: Option ব্যবহার করে ইনপুট ফাইলের জন্য একটি অপশন তৈরি করা হয়েছে। এই অপশনটি Required করা হয়েছে, অর্থাৎ এই অপশনটি অবশ্যই প্রদান করতে হবে।
  2. Non-option Arguments: cmd.getArgs() ব্যবহার করা হয়েছে যা শুধুমাত্র Non-option arguments ফিরিয়ে দেয়, যেগুলি অপশন চিহ্ন ছাড়া সরাসরি কমান্ড লাইনে প্রদান করা হয়।

আউটপুট:

  • যদি আপনি একটি ইনপুট ফাইল এবং একটি বা একাধিক Non-option argument প্রদান করেন:
java NonOptionArgumentExample -f input.txt /path/to/output /another/path

আউটপুট:

Input file: input.txt
Non-option argument: /path/to/output
Non-option argument: /another/path

এখানে, /path/to/output এবং /another/path হলো Non-option arguments যেগুলি cmd.getArgs() এর মাধ্যমে বের করা হয়েছে এবং প্রদর্শন করা হয়েছে।


৩. Non-option Arguments এর ভ্যালিডেশন

যেহেতু Non-option arguments সাধারণত পজিশনাল ইনপুট হিসেবে ব্যবহৃত হয়, সুতরাং আপনি এগুলির উপর কিছু ভ্যালিডেশন প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনি চেক করতে পারেন যে ইউজার যথাযথ পরিমাণ ইনপুট প্রদান করেছে কিনা, বা ইনপুট ফাইল এবং আউটপুট ডিরেক্টরি আর্গুমেন্টগুলি সঠিকভাবে প্রদান করা হয়েছে কিনা।

উদাহরণ:

ধরা যাক, আপনার অ্যাপ্লিকেশনটি দুটি Non-option arguments নিতে হবে: একটি ইনপুট ফাইল এবং একটি আউটপুট ডিরেক্টরি। আপনি ভ্যালিডেশন করতে পারেন যে এই দুটি আর্গুমেন্ট সত্যিই প্রদান করা হয়েছে কিনা।

import org.apache.commons.cli.*;

public class NonOptionArgumentValidationExample {

    public static void main(String[] args) {
        // অপশন কনফিগারেশন
        Options options = new Options();

        // ইনপুট ফাইল অপশন (Required)
        Option inputFile = new Option("f", "file", true, "Input file path");
        inputFile.setRequired(true);  // এটি একটি Required অপশন
        options.addOption(inputFile);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্সিং
            cmd = parser.parse(options, args);

            // ইনপুট ফাইল নাম গ্রহণ
            String input = cmd.getOptionValue("f");
            System.out.println("Input file: " + input);

            // Non-option arguments প্রক্রিয়া করা
            String[] nonOptionArgs = cmd.getArgs();  // Non-option arguments

            // Non-option arguments এর সংখ্যা চেক করা
            if (nonOptionArgs.length != 2) {
                System.err.println("Error: You must specify exactly 2 non-option arguments (input and output).");
                return;
            }

            System.out.println("Non-option argument 1 (Output directory): " + nonOptionArgs[0]);
            System.out.println("Non-option argument 2 (Log file): " + nonOptionArgs[1]);

        } catch (ParseException e) {
            // যদি Required আর্গুমেন্ট না দেওয়া হয়
            System.err.println("Error: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("NonOptionArgumentValidationExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Non-option Arguments Count Validation: এখানে আমরা চেক করছি যে ইউজার দুটি Non-option arguments প্রদান করেছেন কিনা। যদি সংখ্যা সঠিক না হয়, তবে একটি ত্রুটি বার্তা দেখানো হয়।

আউটপুট:

  • যদি আপনি যথাযথ আর্গুমেন্ট প্রদান করেন:
java NonOptionArgumentValidationExample -f input.txt /path/to/output /path/to/log

আউটপুট:

Input file: input.txt
Non-option argument 1 (Output directory): /path/to/output
Non-option argument 2 (Log file): /path/to/log
  • যদি আপনি সঠিক সংখ্যা আর্গুমেন্ট প্রদান না করেন:
java NonOptionArgumentValidationExample -f input.txt /path/to/output

আউটপুট:

Error: You must specify exactly 2 non-option arguments (input and output).

সারাংশ

Apache Commons CLI ব্যবহার করে Non-option arguments হ্যান্ডল করা খুবই সহজ। আপনি CommandLine.getArgs() ব্যবহার করে যেকোনো পজিশনাল আর্গুমেন্ট বের করতে পারেন, যা অপশন চিহ্ন ছাড়া সরাসরি কমান্ড লাইন থেকে ইনপুট হিসেবে গ্রহণ করা হয়। এর মাধ্যমে আপনি CLI অ্যাপ্লিকেশনগুলিতে পজিশনাল আর্গুমেন্টের সংখ্যা এবং মান যাচাই করতে পারেন এবং প্রয়োজনে সেগুলির উপর ভ্যালিডেশন প্রয়োগ করতে পারেন।

Content added By

Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য শক্তিশালী সমাধান প্রদান করে। সাধারণত, কমান্ড লাইন অপশনগুলি (যেমন -f, -v) কীগুলি বা ফ্ল্যাগস হিসেবে ব্যবহার করা হয়, কিন্তু Positional Arguments হল এমন আর্গুমেন্টস যেগুলি নির্দিষ্ট অবস্থানে প্রদান করা হয় এবং তাদের কোনো অপশন থাকে না (যেমন একটি ফাইল পাথ, নাম, ইত্যাদি)।

এই টিউটোরিয়ালে আমরা আলোচনা করব কিভাবে Positional Arguments এর জন্য custom validation করা যায়, যাতে কমান্ড লাইন ইনপুটের সঠিকতা নিশ্চিত করা যায়।

Positional Arguments এর ধারণা

Positional arguments হল আর্গুমেন্টস যেগুলি কমান্ড লাইন পরামিতির মধ্যে নির্দিষ্ট অবস্থানে দেওয়া হয়। এটি সাধারণত অপশন ছাড়া সরাসরি মান প্রদান করার জন্য ব্যবহৃত হয়। যেমন:

java MyApp <inputFile> <outputFile>

এখানে inputFile এবং outputFile হল positional arguments, এবং তাদের অবস্থান দ্বারা নির্দেশিত হয়।

Apache Commons CLI-তে Positional Arguments এর জন্য Custom Validation

Apache Commons CLI তে positional arguments ব্যবহার করার জন্য সাধারণত CommandLine এর getArgs() মেথড ব্যবহার করা হয়। আপনি custom validation তৈরি করতে পারেন যাতে positional arguments সঠিকভাবে দেওয়া হয়েছে কিনা তা যাচাই করা যায়।


উদাহরণ: Positional Arguments এর জন্য Custom Validation

ধরি, একটি অ্যাপ্লিকেশন আছে যেটি দুটি positional argument নেবে:

  1. inputFile: ইনপুট ফাইল পাথ
  2. outputFile: আউটপুট ফাইল পাথ

আমরা চাই, ব্যবহারকারী অবশ্যই দুটি আর্গুমেন্ট প্রদান করবে এবং সেগুলির ফরম্যাট সঠিক হতে হবে। সেক্ষেত্রে custom validation ব্যবহার করে আমরা এসব যাচাই করতে পারব।

কোড উদাহরণ:

import org.apache.commons.cli.*;

public class PositionalArgumentsExample {

    public static void main(String[] args) {
        // অপশন তৈরি
        Options options = new Options();

        // পার্সার তৈরি
        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();

        try {
            // কমান্ড লাইন আর্গুমেন্ট পার্স করা
            CommandLine line = parser.parse(options, args);

            // positional arguments চেক করা
            String[] positionalArgs = line.getArgs();

            // custom validation: দুইটি আর্গুমেন্ট হতে হবে
            if (positionalArgs.length != 2) {
                System.out.println("Error: You must provide exactly two arguments: input file and output file.");
                formatter.printHelp("PositionalArgumentsExample", options);
                return;
            }

            String inputFile = positionalArgs[0];
            String outputFile = positionalArgs[1];

            // ফাইল পাথের সঠিকতা যাচাই করা (Custom validation)
            if (!inputFile.endsWith(".txt")) {
                System.out.println("Error: Input file must have a .txt extension.");
                return;
            }

            // আউটপুট ফাইলের সঠিকতা যাচাই করা
            if (!outputFile.endsWith(".txt")) {
                System.out.println("Error: Output file must have a .txt extension.");
                return;
            }

            // ফাইল পাথ প্রিন্ট করা
            System.out.println("Input File: " + inputFile);
            System.out.println("Output File: " + outputFile);

        } catch (ParseException exp) {
            System.out.println("Error parsing the command line: " + exp.getMessage());
            formatter.printHelp("PositionalArgumentsExample", options);
        }
    }
}

কোডের ব্যাখ্যা:

  1. Positional arguments গ্রহণ: এখানে getArgs() মেথডের মাধ্যমে positional arguments নেওয়া হয়েছে, এবং এটি একটি অ্যারে হিসেবে আর্গুমেন্টগুলিকে সংরক্ষণ করে।
  2. Custom validation:
    • প্রথমত, যাচাই করা হচ্ছে যে দুইটি আর্গুমেন্ট দেওয়া হয়েছে কি না। যদি না হয়, তবে একটি ত্রুটি বার্তা প্রদর্শিত হবে।
    • এরপর, ফাইলের এক্সটেনশন যাচাই করা হচ্ছে। যদি ইনপুট বা আউটপুট ফাইলের এক্সটেনশন .txt না হয়, তবে একটি ত্রুটি বার্তা দেখানো হবে।
  3. HelpFormatter ব্যবহার: যদি আর্গুমেন্টস ভুলভাবে দেওয়া হয়, তবে HelpFormatter ব্যবহৃত হচ্ছে যাতে অ্যাপ্লিকেশনটি কিভাবে ব্যবহার করতে হবে তা ব্যবহারকারী জানতে পারে।

আউটপুট:

  • যদি দুটি আর্গুমেন্ট সঠিকভাবে প্রদান করা হয়:

    java PositionalArgumentsExample input.txt output.txt
    Input File: input.txt
    Output File: output.txt
    
  • যদি দুটি আর্গুমেন্ট না দেওয়া হয়:

    Error: You must provide exactly two arguments: input file and output file.
    
  • যদি ইনপুট ফাইলের এক্সটেনশন .txt না হয়:

    Error: Input file must have a .txt extension.
    
  • যদি আউটপুট ফাইলের এক্সটেনশন .txt না হয়:

    Error: Output file must have a .txt extension.
    

Positional Arguments এর জন্য Custom Validation এর সুবিধা

  1. ভুল ইনপুট প্রতিরোধ: আপনি খুব সহজে যাচাই করতে পারেন যে ব্যবহারকারী সঠিক ফরম্যাটে positional arguments প্রদান করেছেন কিনা। এটি অ্যাপ্লিকেশনের সঠিক কার্যক্রম নিশ্চিত করে।
  2. ব্যবহারকারী-বান্ধব ত্রুটি বার্তা: ব্যবহারকারী যদি ভুল আর্গুমেন্ট প্রদান করেন, তবে সুনির্দিষ্ট ত্রুটি বার্তা দিয়ে তাদের সঠিক ইনপুট প্রদান করতে সহায়তা করা যায়।
  3. ফাইল বা ডিরেক্টরি যাচাই: ফাইল পাথ বা ডিরেক্টরি যাচাই করা যেতে পারে, যেমন কোন ফাইল উপস্থিত রয়েছে বা ফাইল এক্সটেনশন সঠিক কিনা।

সারাংশ

Positional Arguments হল এমন আর্গুমেন্ট যা কমান্ড লাইনের নির্দিষ্ট অবস্থানে থাকে এবং কোনো নির্দিষ্ট অপশন বা ফ্ল্যাগ থাকে না। Apache Commons CLI এর মাধ্যমে custom validation করা সম্ভব, যেখানে আপনি positional arguments যাচাই করতে পারেন এবং সঠিক ইনপুট নিশ্চিত করতে পারেন। এই বৈশিষ্ট্যটি কমান্ড লাইন অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ব্যবহারকারীকে সঠিক আর্গুমেন্ট প্রদান করতে উৎসাহিত করে এবং অ্যাপ্লিকেশনের সঠিক কার্যক্রম নিশ্চিত করে।

Content added By

Apache Commons CLI লাইব্রেরি Java-তে কমান্ড লাইন আর্গুমেন্ট প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। এটি Positional Arguments এবং Optional Arguments একসাথে ব্যবহার করার জন্য একটি শক্তিশালী ব্যবস্থা প্রদান করে। Positional Arguments বা পজিশনাল আর্গুমেন্ট হল আর্গুমেন্টগুলি যা নির্দিষ্ট অবস্থানে দেওয়া হয় এবং সেগুলির কোনো বিকল্প নাম থাকে না। অন্যদিকে, Optional Arguments বা ঐচ্ছিক আর্গুমেন্টগুলি ঐচ্ছিক এবং এগুলির নাম থাকে (যেমন -h, --help)।

যখন আপনি Positional এবং Optional Arguments একসাথে ব্যবহার করেন, তখন এটি আপনাকে বিভিন্ন ধরনের আর্গুমেন্ট প্রক্রিয়াকরণে অনেক নমনীয়তা এবং স্বচ্ছতা প্রদান করে।


Positional এবং Optional Arguments এর মধ্যে পার্থক্য

  1. Positional Arguments:
    • এগুলি নির্দিষ্ট স্থানে প্রবেশ করে এবং তাদের কোন নাম থাকে না।
    • উদাহরণ: ফাইল নাম, ইনপুট পাথ ইত্যাদি।
    • উদাহরণ: java MyApp input.txt
  2. Optional Arguments:
    • এগুলি ঐচ্ছিক এবং তাদের একটি নাম থাকে (যেমন -h, --input ইত্যাদি)।
    • উদাহরণ: java MyApp -v --output result.txt

Positional এবং Optional Arguments একসাথে ব্যবহারের কৌশল

Apache Commons CLI ব্যবহার করে আপনি খুব সহজে Positional এবং Optional আর্গুমেন্ট একসাথে ম্যানেজ করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে পজিশনাল এবং ঐচ্ছিক আর্গুমেন্ট একসাথে ব্যবহৃত হচ্ছে।


উদাহরণ: Positional এবং Optional Arguments একসাথে ব্যবহার

import org.apache.commons.cli.*;

public class PositionalAndOptionalExample {
    public static void main(String[] args) {
        // বিকল্প তৈরি করা
        Options options = new Options();

        // --verbose বিকল্প (ঐচ্ছিক)
        Option verboseOption = new Option("v", "verbose", false, "Enable verbose output");
        options.addOption(verboseOption);

        // --output বিকল্প (ঐচ্ছিক)
        Option outputOption = new Option("o", "output", true, "Output file");
        options.addOption(outputOption);

        // কমান্ড লাইন পার্সার তৈরি
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // পজিশনাল আর্গুমেন্ট গ্রহণ
            String positionalArg = args.length > 0 ? args[args.length - 1] : null;

            // --verbose আর্গুমেন্ট চেক করা
            if (cmd.hasOption("v")) {
                System.out.println("Verbose mode enabled");
            }

            // --output আর্গুমেন্ট চেক করা
            if (cmd.hasOption("o")) {
                String outputFile = cmd.getOptionValue("o");
                System.out.println("Output file: " + outputFile);
            }

            // পজিশনাল আর্গুমেন্ট চেক করা
            if (positionalArg != null) {
                System.out.println("Positional argument: " + positionalArg);
            } else {
                System.out.println("No positional argument provided.");
            }

        } catch (ParseException e) {
            System.out.println("Error parsing command line: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("PositionalAndOptionalExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Options:
    • এখানে দুটি বিকল্প তৈরি করা হয়েছে: -v বা --verbose (ঐচ্ছিক) এবং -o বা --output (ঐচ্ছিক), যা ব্যবহারকারী প্রদান করতে পারেন।
    • -o বিকল্পটি একটি আর্গুমেন্ট গ্রহণ করে (যেমন আউটপুট ফাইলের নাম), আর -v বিকল্পটি শুধুমাত্র একটি ফ্ল্যাগ হিসেবে কাজ করে।
  2. Positional Argument:
    • পজিশনাল আর্গুমেন্টটি শেষ আর্গুমেন্ট হিসেবে গৃহীত হয়েছে (args[args.length - 1]), যেহেতু এটি কোনো নাম থাকে না এবং শুধুমাত্র শেষ পজিশনে থাকে।
  3. CommandLine Parsing:
    • CommandLineParser ক্লাস ব্যবহার করে আর্গুমেন্টগুলো পার্স করা হয়। তারপর, ঐচ্ছিক বিকল্প এবং পজিশনাল আর্গুমেন্টের মান চেক করা হয়।
  4. HelpFormatter:
    • যদি কোনো ত্রুটি ঘটে, তবে HelpFormatter ব্যবহার করে সহায়ক বার্তা প্রদর্শন করা হবে, যা ব্যবহারকারীকে সঠিকভাবে কমান্ড এবং বিকল্প ব্যবহার করতে সহায়ক হবে।

উদাহরণ: কমান্ড লাইনে ইনপুট এবং আউটপুট প্রদান

java PositionalAndOptionalExample input.txt -v --output result.txt

এক্ষেত্রে:

  • input.txt পজিশনাল আর্গুমেন্ট (পোস্টিশনাল আর্গুমেন্ট)
  • -v ঐচ্ছিক ফ্ল্যাগ, verbose মুড সক্রিয় করবে
  • --output result.txt আউটপুট ফাইলের নাম

আউটপুট:

Verbose mode enabled
Output file: result.txt
Positional argument: input.txt

Apache Commons CLI-তে Positional এবং Optional আর্গুমেন্ট একসাথে ব্যবহারের মাধ্যমে আপনি একটি নমনীয় এবং শক্তিশালী কমান্ড লাইন ইনপুট প্রক্রিয়া তৈরি করতে পারেন। এটি আপনাকে আর্গুমেন্টগুলো সঠিকভাবে ব্যবস্থাপনা করতে সাহায্য করে, এবং আপনাকে একই সাথে ঐচ্ছিক বিকল্প এবং পজিশনাল আর্গুমেন্ট প্রক্রিয়াকরণের সুযোগ দেয়। HelpFormatter ব্যবহার করে আপনি সহায়ক বার্তা তৈরি করতে পারেন যা ব্যবহারকারীদের সঠিকভাবে কমান্ড ব্যবহার করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...