টেমপ্লেট থেকে পাঠ্য ফাইলগুলি তৈরি করার সরঞ্জাম


9

টেমপ্লেটগুলি থেকে আমাকে নিয়মিত 100+ পাঠ্য ফাইল তৈরি করতে হবে।
আমি বর্তমানে একটি অতিরিক্ত জটিল শেল স্ক্রিপ্ট ব্যবহার করি। আমি মনে করি এটি পরিচালনা করার একটি দুর্দান্ত উপায় আছে, তবে কীভাবে তা আমি জানি না।

আমার একটি "ডাটাবেস" রয়েছে:

# outputfile      template            data1   data2    data3
first.txt         $template_main      $text1  abcd     1234
second.txt        $template_main      $text2  efgh     5678
third.txt         $template_other     $text1  ij       90

এবং একটি কনফিগারেশন ফাইল:

template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah

টেমপ্লেটগুলি হ'ল %% ডেটা 2 %% (স্থানধারক ফর্ম পরিবর্তন করা যেতে পারে) এর মতো স্থানধারক সহ পাঠ্য ফাইল।

জটিল শেল স্ক্রিপ্টের চেয়ে কেউ কী এটিকে স্বয়ংক্রিয় করার জন্য কোনও সরঞ্জাম জানেন?


কী জটিল তা বিচার করা খুব কঠিন। এর মধ্যে একটি পোস্ট করা আমাদের পরিস্থিতি বুঝতে সহায়তা করবে। হয়তো পিএইচপি বা পার্ল স্ক্রিপ্ট চেষ্টা করে দেখুন? যার স্ট্রিং পরিচালনা করার আরও শক্তিশালী / সহজ উপায় রয়েছে।
জন সিউ


উত্তর:


5

সম্ভবত এই জাতীয় কয়েক হাজার টেম্পলেট ভাষা এবং সম্পর্কিত সফ্টওয়্যার রয়েছে। একটি জনপ্রিয় উদাহরণ হ'ল ইআরবি , যা ভ্যানিলা রুবির অংশ। রুবি ইনস্টল করার পরে আপনি শুরু করতে পারেন irbবা একটি সম্পাদক এবং এটির অনুভূতি পেতে কেবল ক্যানোনিকাল উদাহরণটি পেস্ট করতে পারেন:

require 'erb'

x = 42
template = ERB.new <<-EOF
  The value of x is: <%= x %>
EOF
puts template.result(binding)

5

আপনি বিবেচনা করতে পারেন:

  • জিএনইউ সরঞ্জামটি বলা হয় m4যা একটি পাঠ্য প্রসেসর যা আপনি যে পাঠ্যটি গ্রহণ করতে চান তা আউটপুট দেয় অংশগুলি পরিবর্তনের জন্য একটি টেম্পলেট। এটি অবশ্যই শেল স্ক্রিপ্টের চেয়ে সহজ হবে। (এটি # ডেফাইন ম্যাক্রো আইআইআরসি সহ সি প্রিপ্রোসেসরের মতো বা আরও বেশি কাজ করে)।

  • GNU সরঞ্জাম xsltprocযা একটি রূপান্তর প্রয়োগ করে এবং আপনাকে আউটপুট দেয়। টেমপ্লেট হয় xml, এবং xsltআপনার প্রতি যা যা করতে রূপান্তর জিনিস ফরম্যাট xmlতাই হিসেবে আউটপুট পাঠ্য।

ব্যক্তিগতভাবে আমার কাছে অগ্রাধিকার রয়েছে xsltতবে আপনার ক্ষেত্রে এটি ফর্মের ক্ষেত্রগুলির সাথে মানানসই নয় %DATA1% %DATA2%। এটির এক্সএমএল দরকার, তাই আপনি আপনার টেমপ্লেটগুলি পরিবর্তন করতে ঘৃণা করবেন।

সুতরাং আপনি সত্যিই এক নজর করা উচিত m4

  • অন্য পছন্দ হিসাবে, আমাকে বলা হয়েছে যে Haskellপ্রোগ্রামিংয়ের ভাষা স্ট্রিমগুলির রূপান্তর করতে সত্যিই ভাল is আমি কেবল এই ধারণাটি বিবেচনা করছি কারণ হাস্কেল প্রেমিকারা বিস্ময়কর Parsecপ্যাকেজ সম্পর্কে কথা বলেন , যা স্ট্রিং স্ট্রিমগুলির প্রাকৃতিক বিভাজনকে মঞ্জুরি দেয়। এক্সএসল্টের চেয়ে অনেক বেশি ভাল, যা ইতিমধ্যে ভাল। আমি কেবল তাদের পুনরাবৃত্তি করি, কারণ আমি কেবল হাস্কেল শিখছি, এবং আপাতত কীভাবে এটির সাহায্যে পাঠ্য রূপান্তর করা যায় তা সম্পর্কে আমার একক ধারণা নেই

2

আমি মনে করি যে আপনার জন্য সত্যিকারের স্ক্রিপ্টিং ভাষা যেমন পিএইচপি, পার্ল বা পাইথনের দিকে নজর দেওয়া ভাল, বিশেষত যদি আপনি বড় আকারের জটিল শেল স্ক্রিপ্টগুলিতে যেতে না চান।


আমি এই দ্বিতীয়টি, যখন আমাকে এই জাতীয় পাঠ্য মুনিংয়ের ক্রিয়াকলাপ করতে হয় তখন আমি পার্লকে দখল করি (তবে পাইথন বা রুবির সমানভাবে করা উচিত)। আপনি খুব কমই ব্যবহার করেন এমন কোনও বিশেষায়িত প্রোগ্রামের চেয়ে নিয়মিত, অনেক বেশি ব্যবহৃত সরঞ্জাম ব্যবহার করা (আপনি যদি কাজের ক্ষেত্রে ১০০% উপযোগী না হন) এর চেয়ে ভাল ব্যবহার করুন (এবং যা তাড়াতাড়ি বা পরে একরকম হ্রাস পাবে )।
ভোনব্র্যান্ড

2

আপনি কেন এটি করেন তা আমি জানি না তবে এখানে আপনার দুটি টেম্পলেট রয়েছে। একটি হ'ল আপনার 'ডাটাবেস' এবং একটি হ'ল আপনার আসল টেম্পলেট। উভয়ই shtpl দিয়ে হ্যান্ডেল করা সহজ । (আমার বেসরকারী প্রকল্প, তাই বহুল ব্যবহৃত হয় না, তবে আসলে সেই ধরণের সমস্যা সমাধানের জন্য তৈরি করা হয়েছিল)

Shtpl দিয়ে আপনি এরকম কিছু করবেন:

ফাইল 'কনফিগারেশন' এর সামগ্রী:

template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah

ফাইল 'ডাটাবেস' এর সামগ্রী (আমি ধরে নিয়েছি, ডিলিমিটারটি ট্যাব () t)):

#% . "$CONFFile"
#% if [ -z "$template_main" ] || [ -z "$template_other" ] || \
#%    [ -z "$text1" ]         || [ -z "$text2" ]; then
#%   printf "database could not be generated!\n" > /dev/stderr
#%   exit 1
#% fi
#%# outputfile  template        data1   data2   data3
first.txt       $template_main  $text1  abcd    1234
second.txt      $template_main  $text2  efgh    5678
third.txt       $template_other $text1  ij      90

জেনারেটটেম্পলেট.শ এর সামগ্রী:

#!/bin/bash

if [ ! -s "$CONFFile" ]; then
 if [ ! -s "$1" ]; then
   printf "CONFfile is not set or empty!\n"
   exit 1
 else
   export CONFFile="$1"
 fi
fi

DB="$( bash -c "$( shtpl database )" )"
if [ -z "$DB" ]; then
  printf "Database is empty! Abort.\n"
  exit 2
fi
IFS=$'\t'
printf "%s" "$DB" | while read "Out" "In" "data1" "data2" "data3"; do

  data1="$data1" data2="$data2" data3="$data3" \
  bash -c "$( shtpl "$In" )" > "$Out"

done

Main.txt এর সামগ্রী (other.txt বেশ একই রকম):

main.txt template
$data1
$data2
$data3

সুতরাং জেনারেটটেম্প্লেটস.এসকে কার্যকর করা হচ্ছে

$ bash generatetemplates.sh "./configuration"

আমাদের প্রথম। txt, দ্বিতীয়। txt এবং তৃতীয়.txt উত্পন্ন করে।

$ cat first.txt    | $ cat second.txt   | $ cat third.txt
main.txt template  | main.txt template  | other.txt template
whatever           | blah               | whatever
abcd               | efgh               | ij
1234               | 5678               | 90

সামান্য ব্যাখ্যা: জেনারেটেম্প্লেটস.শ প্রথমে আপনার কনফিগারেশন-ফাইল থেকে প্রয়োজনীয় 'ডাটাবেস' তৈরি করা হয়। এবং দ্বিতীয়ত, ডাটাবেসের প্রতিটি টিপেলের জন্য অবশেষে আপনার ইন-টেম্পলেট থেকে সম্পর্কিত আউট-ফাইল।

দ্রষ্টব্য: একটি খালি তথ্য [123] পড়তে সমস্যা troubles সুতরাং এই পদ্ধতির মাধ্যমে এটি সম্ভব নয়।

সুতরাং, আশা করি এটি আপনার প্রয়োজনের জন্য যথেষ্ট সহজ।

আনন্দ কর!


1

আমি সম্প্রতি একটি ওপেন সোর্স প্রকল্প প্রকাশ করেছি যা জিনজার মতো টেম্পলেট সিনট্যাক্স ব্যবহার করে কেবল এটি সম্পাদন করে। একে কুকি বলা হয় । এখানে একটি ডেমো রয়েছে:

কুকি ডেমো


1

পরীক্ষা করে দেখুন tcat.sh । বলুন আপনার একটি টেম্পলেট ফাইল রয়েছে:

hello ${name}

তারপর

$ export name=world # or load and export from a properties file.
$ ./tcat.sh template-file

আউটপুট:

hello world
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.