আমি কীভাবে org মোডে টেবিল ফিল্টার করতে পারি


11

উদাহরণস্বরূপ, আমি টেবিলটি ফিল্টার করতে চাই যা এটি সারিটি দেখায় যা 3 এবং 4 কলামে কেবল "ইউএসএ" স্ট্রিং ধারণ করে।

উত্তর:


19

আপনি প্রচুর সমাধান ব্যবহার করতে পারেন। আমি ধরে নিলাম আপনি একটি বিদ্যমান টেবিলের উপর ভিত্তি করে একটি নতুন টেবিল তৈরি করতে চান। এটিতে বাবেল কার্যকারিতা জড়িত যেখানে আপনি নতুন টেবিল উত্পাদনকারী কোড ব্লককে সংজ্ঞায়িত করেন। কোড ব্লকগুলি অনেকগুলি ভাষায় হতে পারে এবং আপনি এমনকি সাধারণভাবে সারণী সূত্রে ব্যবহার করার জন্য এই জাতীয় কোড ব্লককে সংজ্ঞায়িত করতে পারেন।

আমি এখানে কেবল ইমাস লিস্প ব্যবহার করে একটি উদাহরণ দেখছি। আপনি গিথুবটিতে আমার উদাহরণ সংগ্রহে আরও অনেক উদাহরণ পেতে পারেন: https://github.com/dfeich/org-babel-ex উদাহরণ

 *table filter

  #+NAME: table1
  | col1  | col2 | col3 | col4 | col5 |
  |-------+------+------+------+------|
  | row0  |    0 | CH   | CH   |    0 |
  | row1  |    2 | D    | CN   |    5 |
  | row2  |    4 | USA  | PL   |   10 |
  | row3  |    6 | CN   | D    |   15 |
  | row4  |    8 | JP   | USA  |   20 |
  | row5  |   10 | PL   | PL   |   25 |
  | row6  |   12 | USA  | JP   |   30 |
  | row7  |   14 | D    | CN   |   35 |
  | row8  |   16 | PL   | USA  |   40 |
  | row9  |   18 | CN   | D    |   45 |
  | row10 |   20 | CH   | CH   |   50 |

এখন আমরা একটি ফিল্টার ফাংশন সংজ্ঞায়িত করি যা প্রয়োজনীয় মান সহ একটি নতুন টেবিল তৈরি করে।

  • আমি পূর্বের সারণীতে BEGIN লাইনে : var tbl = টেবিল 1 আর্গুমেন্টটি ব্যবহার করে পড়ছি ।
  • ফিল্টার করার জন্য মানটি আমি একইভাবে সংজ্ঞায়িত করি : Val = "USA" সেট করে var অ্যাসাইনমেন্ট
  • লক্ষ্য করুন যে আমি কলাম শিরোনামগুলি সংরক্ষণ করার জন্য : বিগইন লাইনে কলনেম যুক্তিটি ব্যবহার করছি ।
  • সরলতার জন্য আমি এই উদাহরণগুলিতে কেবল কলাম 4 ফিল্টার করি। তবে এটি প্রসারিত করা তুচ্ছ। আপনি যদি সুস্পষ্ট সমাধান চান তবে কেবল জিজ্ঞাসা করুন।
  # + NAME: আমার ফিল্টার
  # + BEGIN_SRC এলিজিপ: var tbl = টেবিল 1 ভাল = "ইউএসএ": কলনেম y
    (টিবিএল সারি জন্য ক্লিপ লুপ
          যদি (সমান (নবম 3 সারি) ভাল)
          newtbl মধ্যে সারি সংগ্রহ
          পরিশেষে newtbl ফিরে)
  + # END_SRC

  # + ফলাফল: আমার-ফিল্টার
  | কল 1 | কল 2 | কল 3 | কল 4 | কল 5 |
  | ------ + + ------ + + ------ + + ------ + + ------ |
  | সারি 4 | 8 | জেপি | ইউএসএ | 20 |
  | সারি 8 | 16 | পিএল | ইউএসএ | 40 |

Org- মোড CALL সিনট্যাক্সের সাহায্যেও আমি এই ফাংশনটি ব্যবহার করতে পারি

  # + কল: আমার-ফিল্টার (tbl = টেবিল 1, ভাল = "সিএন"): কলনেম y

  + # ফলাফল:
  | কল 1 | কল 2 | কল 3 | কল 4 | কল 5 |
  | ------ + + ------ + + ------ + + ------ + + ------ |
  | সারি 1 | 2 | ডি | সিএন | 5 |
  | সারি 7 | 14 | ডি | সিএন | 35 |

আমি এখানে এসকিউএলাইট পদ্ধতিটিও দেখিয়েছি যেখানে আমি আপনার সমস্ত সারিগুলিকে ফিল্টারিংয়ের আসল প্রয়োজনীয়তাটি ব্যবহার করি যেখানে কলাম 3 বা 4 এ স্ট্রিং রয়েছে the স্ক্লাইট পদ্ধতির একটি ছোটখাটো অসুবিধা হ'ল আমাদের টেবিলে পড়ার এবং তৈরি করার জন্য কিছু বয়লারপ্লিট কোড রয়েছে একটি এসকিউএলাইট ডিবি।

  # + NAME: আমার ফিল্টার 2
  # + BEGIN_SRC স্ক্লাইট: db table1.sqlite: var tbl = table1 val = "USA": নামগুলি হ্যাঁ
    টেবিল 1 বিদ্যমান থাকলে ড্রপ টেবিল;
    সারণী সারণি 1 তৈরি করুন (কল 1 ভর্চার, কল 2 সংবেদী, কল 3 ভ্যাচার,
    কল 4 ভোচার, কল 5 ইনটিগার);
    .আইপোর্ট "$ tbl" টেবিল 1
    টেবিল 1 থেকে * নির্বাচন করুন যেখানে কল 3 = '$ ভাল' বা কল 4 = '$ ভাল';
  + # END_SRC

  + # ফলাফল:
  | কল 1 | কল 2 | কল 3 | কল 4 | কল 5 |
  | ------ + + ------ + + ------ + + ------ + + ------ |
  | সারি 2 | 4 | ইউএসএ | পিএল | 10 |
  | সারি 4 | 8 | জেপি | ইউএসএ | 20 |
  | সারি 6 | 12 | ইউএসএ | জেপি | 30 |
  | সারি 8 | 16 | পিএল | ইউএসএ | 40 |


  # + কল: আমার-ফিল্টার 2 (টিবিএল = টেবিল 1, ভাল = "সিএন"): কলনেমগুলি y

  + # ফলাফল:
  | কল 1 | কল 2 | কল 3 | কল 4 | কল 5 |
  | ------ + + ------ + + ------ + + ------ + + ------ |
  | সারি 1 | 2 | ডি | সিএন | 5 |
  | সারি 3 | 6 | সিএন | ডি | 15 |
  | সারি 7 | 14 | ডি | সিএন | 35 |
  | সারি 9 | 18 | সিএন | ডি | 45 |

আশা করি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি এবং লিঙ্কগুলি আপনাকে সমাধানের অন্যান্য প্রকারগুলি খুঁজে পেতে সহায়তা করে।


দুর্দান্ত সমাধান। স্ক্লাইট এবং gnuplot সঙ্গে, একক উত্স টেবিল থেকে একাধিক প্লট দুর্দান্ত অর্থনীতির সাথে উত্পন্ন করা যেতে পারে।
ইমাক্স ব্যবহারকারী 10

দুর্দান্ত সমাধানের জন্য আপনাকে ধন্যবাদ! বিটিডাব্লু, আমার পরিবেশে, symbol-nameইমাস লিসপ সমাধানটিতে সাফল্যের জন্য আমাকে ফাংশনটি মুছতে হয়েছিল। শুধু উল্লেখ করার জন্য।
RUserPassingBy

ধন্যবাদ। আমি কেবল এখন উপলব্ধি করেছি যে আমি সিআরসি ব্লক দ্বারা সরাসরি উত্পাদিত একটি টেবিল থেকে আমার মূল উদাহরণটি প্রতীক হিসাবে দেশের নাম ব্যবহার করে তৈরি করেছি, তাই ফিল্টারটি আসলে স্ট্রিং নয়, চিহ্ন হিসাবে হস্তান্তরিত হয়েছিল। এটি এখন সংশোধন করা হয়েছে।
dfeich

0

আমি ব্যবহার কুই - ডেটা হিসাবে পাঠ্য , এবং আমার 2 ফাংশন library-of-babel( কনফারেন্স-উদাহরণ ) একটি সহজ প্রদান কোয়েরি ইন্টারফেস / সংস্থা-ইনলাইন টেবিল ও বহিস্থিত যোগদানের .*svফাইল।

হুডের নীচে, q( মাধ্যমে ) ব্যবহার , যেমন এর দ্বিতীয় পদ্ধতির মতো, তবে প্রতিটি স্বতন্ত্র উত্স সারণীতে নির্দিষ্ট শোরগোলের বয়লারপ্লেট-কোডের প্রয়োজনীয়তা সরিয়ে দেয় । এটি কেবলমাত্র সিস্টেম প্যাকেজ ম্যানেজারের মাধ্যমে একবার ইনস্টল করা দরকার python-q-text-as-data

আপনার বাবেলের লাইব্রেরিটি নীচের 2 টি কার্যক্রমে লোড হয়ে গেলে, #+Call:এসকিউএল কোয়েরিগুলি ব্যবহার করার জন্য আপনার org-file এ কেবল নীচের মতো দরকার ।

#+CALL: Q[:stdin table1](where="col4=='USA'")

#+RESULTS:
| col1 | col2 | col3 | col4 | col5 |
|------+------+------+------+------|
| row4 |    8 | JP   | USA  |   20 |
| row8 |   16 | PL   | USA  |   40 |

এটি আউটপুট SELECT $select FROM $from WHERE $whereথেকে সমস্ত কলাম নির্বাচন করার জন্য পরামিতিগুলির ডিফল্ট হিসাবে কমান্ড-লাইন তৈরি করে stdin

আপনার গ্রন্থাগারে যুক্ত করার জন্য কোডগুলি হ'ল:

** Add a header Row to tables
#+name: addhdr
#+begin_src emacs-lisp :var tbl=""
(cons (car tbl) (cons 'hline (cdr tbl)))
#+end_src

** Filtering with SQL
#+NAME: Q
#+HEADER: :results value table
#+HEADER: :var callOptsStd="-H -O -t" callOpts=""
#+HEADER: :post addhdr(*this*)
#+BEGIN_SRC shell :stdin Ethers :var select="*" from="-" where="1"
q $callOptsStd $callOpts "Select $select from $from where $where"
#+END_SRC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.