প্রতিস্থাপন পাঠ্যে কিছু গণিত প্রয়োগ করতে পারে এমন কোনও পাঠ্য সম্পাদক?


15

আমার কাছে বড় এক্সএমএল ফাইল রয়েছে

<obj param="2542">
<obj param="2333">
<obj param="6433">

আমাকে কিছু সংখ্যার দ্বারা সমস্ত "পরম" মান বৃদ্ধি করতে হবে। আমি অনেক সম্পাদকের রেজিপ এক্স অনুসন্ধানের সাথে আমার যে সংখ্যাগুলির প্রয়োজন তা মেলতে পারি, তবে প্রতিস্থাপনে কিছু গণিত কীভাবে প্রয়োগ করা যায়?


1
কী অপারেটিং সিস্টেম? পরিবর্তে আপনি কি শেল স্ক্রিপ্ট দিয়ে খুশি হবেন (যা মোটামুটি সহজ হবে)? যাইহোক, আমি নিশ্চিত vimএবং emacsএই জাতীয় জিনিসটি করতে পারি তবে এটির জন্য একটি কমান্ড ব্যবহার না করে স্ক্রিপ্ট লেখার প্রয়োজন হতে পারে।
উদ্ভট

উইন্ডোজের নীচে @ ফ্রেজজুস আমি বরং সম্ভব কিছু লিখতে চাই। তবে আপনি যদি শেল স্ক্রিপ্ট পোস্ট করেন তবে আমি নিশ্চিত যে এটি অনেকের পক্ষে কার্যকর হবে।
সার্জ

উত্তর:


18

আরও কিছুক্ষন ঝাঁকুনির পরে, দেখা যাচ্ছে যে ভিএম স্ক্রিপ্টিং ছাড়াই একটি একক কমান্ড দিয়ে এটি করতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত সমস্ত নম্বরে 50 টি যোগ করার জন্য <obj param="আপনি ব্যবহার করতে পারেন:

:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g

আমাকে এটা ভেঙে দিন।

: ভিএম-তে কমান্ড-লাইন মোডে প্রবেশ / সাইনাইফ করার সাধারণ উপায়।

%পুরো ডকুমেন্টের আওতার মধ্যে অর্থ; আপনি একটি সংখ্যা পরিসীমা স্থাপন করতে পারেন, উদাহরণস্বরূপ, 1,50পরিবর্তে প্রথম 50 লাইনের মধ্যে এটি করতে to

s বিকল্পের জন্য সংক্ষিপ্তকরণ (আপনি যদি পছন্দ করেন তবে পুরো শব্দটি লিখতে পারেন)

@সীমানা হয়; আপনি যে কোনও চরিত্রটি এতক্ষণ ব্যবহার করতে পারবেন যেহেতু এটি আপনি সন্ধান করছেন না। এটি তিনবার ব্যবহার করুন। (বাক্যবিন্যাস অনুরূপ sed।)

বিভেদক পরবর্তী সংঘটন করতে সবকিছু আপ @ জন্য অনুসন্ধান করতে এই ক্ষেত্রে REG প্রাক্তন প্যাটার্ন <obj param="দ্বারা অনুসরণ \d\+, যা সংখ্যার কোনো সংখ্যা। \(এবং \)সেখানে একটি একক REG প্রাক্তন গ্রুপ যা মত backreferences মেলে করবে ডিজিটের এই সমগ্র ক্রম সেট করতে হয় \1, অথবা তেজ এর submatchকমান্ড।

তারপরে ডিলিমিটারটি @চিহ্নিত করে যে প্রতিস্থাপন পাঠ্যটি কি অনুসরণ করে।

\=এখানে শুরু উপায়ে এ বরং একটি REG প্রাক্তন প্যাটার্ন বা স্ট্রিং, যা এখানে চাবিকাঠি চেয়ে কিছু মূল্যায়ন মত প্রকাশের ফলাফলের খেলোয়াড়রা।

তারপরে আমাদের '<obj param="'প্রতিস্থাপন পাঠ্য শুরু করার জন্য রয়েছে। .যা অনুসরণ করে স্ট্রিং concatenating জন্য তেজ এর ফাংশন।

submatch(1)একটি ভিআইএম অন্তর্নির্মিত ফাংশন যা কেবলমাত্র প্রতিস্থাপন কমান্ডের মধ্যে ব্যবহার করা যেতে পারে এবং স্ট্রিংটি রিজেক্সের মতোই দেয় \1; আপনি submatch(2)রেগেক্স এর সমতুল্য এবং এর জন্য ব্যবহার করবেন \2। ( \0পুরো ম্যাচিং প্যাটার্নটি, তবে আমরা এখানে এটি চাই না \(and ) এবং \)অনুসন্ধান প্যাটার্নটিতে কী গণনা করা হয়েছে তা চিহ্নিত করতে ব্যবহার করা হয় submatch(1)

সুতরাং অনুসন্ধানের ধরণ আকারে (submatch(1) + 50)অঙ্কগুলি অনুসরণ করে এমন সংখ্যায় 50 যুক্ত করার ফলাফল দেয় <obj param="

@প্রতিস্থাপন পাঠ্যের শেষ চিহ্ন চিহ্নিত করতে আবার ডিলিমিটার ব্যবহার করা হয়।

gবিকল্পটি বিশ্বব্যাপী করতে পতাকা ব্যবহার করা হয়; আপনি যদি প্রতিটি লাইনে কেবল প্রথম উদাহরণটি প্রতিস্থাপন করতে চান তবে আপনি এটি বাদ দিতে পারেন।

আপনি সম্ভবত সেখান থেকে কাজ করতে পারেন কীভাবে বিভিন্ন সংখ্যা যুক্ত করবেন, বা বিয়োগ করবেন বা ভাগ করবেন ইত্যাদি


এটি দুর্দান্ত, আমার একটি জিপিএক্স ফাইল ছিল যা দুর্নীতিগ্রস্থ ছিল কারণ দ্রাঘিমাংশ মানগুলি সম্পূর্ণ অবৈধ। ভাগ্যক্রমে, অক্ষাংশ ঠিক ছিল তাই আমি একটি মানচিত্র ব্যবহার করে প্রথম সঠিক মানটি কী হওয়া উচিত তা নিয়ে কাজ করতে সক্ষম হয়েছি, কিছু গণিত করতে পেরেছিলাম এবং এটি ঠিক করার জন্য আমার প্রতিটি মান থেকে 4294.567548 বিয়োগ করা দরকার ছিল। আমার একমাত্র হোঁচট খাওয়া ছিল যে এই পদ্ধতিটি একটি ভাসমান পয়েন্ট সংখ্যাটিতে কাজ করে না, তাই আমি দশমিক পয়েন্টের প্রতিটি পক্ষই পৃথক বিকল্প হিসাবে এক -4294 এবং একটি -567548 হিসাবে করেছি।
stuffe

7

Emacs এ (সংস্করণ 23) থেকে: রিজেক্সেপ প্রতিস্থাপনে\, স্বেচ্ছাসেবী লিস্প কোডটি কার্যকর করতে ব্যবহার করুন । উদাহরণস্বরূপ, আপনি যে নম্বরগুলি ব্যবহার করতে পারেন তাকে বর্গাকার করতে

M-x replace-regexp
param="\([0-9]+\)"
param="\,(* \#1 \#1)"

ভিমে: আপনার প্রতিস্থাপন পাঠ্যটি \=(দেখুন :help sub-replace-special) দিয়ে শুরু করুন । উদাহরণস্বরূপ, সংখ্যাগুলি বর্গাকারে:

s!param="\([0-9]\+\)"!\='param="'.submatch(1)*submatch(1).'"'!

বেশ কয়েকটি সম্পাদক আপনাকে ম্যাক্রোগুলির সাথে এই জাতীয় জিনিসগুলি করার অনুমতি দেয়: একটি ম্যাক্রো সংজ্ঞায়িত করুন যা ১. পরবর্তী ম্যাচটি সন্ধান করে এবং ২. প্রতিস্থাপনটি সম্পাদন করে (প্রয়োজনে পাটিগণিতের জন্য একটি বাহ্যিক সরঞ্জাম ব্যবহার করে); আপনার ম্যাচগুলি যতবার ম্যাক্রো পুনরাবৃত্তি করুন।


আন্ডাররেটেড উত্তর। সংক্ষিপ্ত এবং আপনি 2 সম্পাদক + সাধারণ কেস কভার করেন।
derekv

1

আপনার জন্য এটি করতে আপনি ভিএম ব্যবহার করতে পারেন। কেবল আপনার ফাইলটি খুলুন এবং একটি ম্যাক্রো রেকর্ড করুন । উদাহরণ: যে কোনও সংখ্যার জন্য অনুসন্ধান করুন

/[0-9]{1,}

তারপরে কি এবং একটি টিপুন (একটি রেজিস্টার ম্যাক্রো স্টোর)। তারপরে, সিটিআরএল-এক্স টিপুন (সংখ্যাটি 1 দ্বারা বৃদ্ধি করা) এবং তারপরে n টি (পরবর্তী অনুসন্ধানের ফলাফলের জন্য) টিপুন। আপনি এটি করার পরে, ম্যাক্রো সংরক্ষণ করতে আবার q টিপুন। এখন আপনি @ + এ টিপে পরবর্তী নম্বরটিতে ম্যাক্রো প্রয়োগ করতে পারেন। এটি বর্তমান নম্বরটি পরিবর্তন করবে এবং পরবর্তী একটিতে লাফ দেবে। এটি পুনরাবৃত্তি করে বা x @ a ব্যবহার করে আপনি সেই এক্স বারটি পুনরাবৃত্তি করতে পারেন।

ঠিক আছে, বর্ণনাটি কীভাবে এটি করা যায় তা দেখাতে যথেষ্ট নাও হতে পারে। ভিএম-তে ম্যাক্রো প্রক্রিয়াটি বর্ণনা করে কেবল একটি টিউটোরিয়াল পড়ুন refer


আমার যদি সংখ্যাটি 1 দ্বারা নয় বরং এক মিলিয়ন দ্বারা পরিবর্তন করার দরকার হয়? অথবা সম্ভবত কিছু গুণ / বিভাগ ব্যবহার?
সার্জ

1
আপনি যদি প্রতিটি সংখ্যায় একটি ধ্রুবক x যুক্ত করতে চান তবে এটি সহজ: x + Ctrl + a। আপনার কি বিভিন্ন সংখ্যা যুক্ত করার দরকার আছে?
evnu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.