একটি এক্সকোড প্রকল্পে কোডের কতগুলি লাইন রয়েছে তা কীভাবে আবিষ্কার করবেন?


149

একটি এক্সকোড প্রকল্পে কোডের কতগুলি লাইন রয়েছে তা নির্ধারণ করার কোনও উপায় আছে? আমি প্রতিশ্রুতিবদ্ধ যে ম্যানেজমেন্টাল পরিমাপ বা কর্মচারী মানদণ্ডের উদ্দেশ্যে এই জাতীয় তথ্য ব্যবহার করবেন না। ;)


আপনি লাইন চান, তাহলে আপনি এই উত্তর ব্যবহার করতে পারেন: stackoverflow.com/questions/5901758/... কিন্তু এটা শূণ্যস্থান অন্তর্ভুক্ত
GeneCode

উত্তর:


126

পরীক্ষা করে দেখুন CLOC

ক্লক অনেক প্রোগ্রামিং ভাষায় ফাঁকা লাইন, মন্তব্য লাইন এবং উত্স কোডের শারীরিক লাইন গণনা করে।

( লিগ্যাসি বিল্ডগুলি সোর্সফর্গে সংরক্ষণাগারভুক্ত করা হয়েছে ))


11
সিএলওসি হোমব্রুয়ের মাধ্যমে উপলব্ধ। কমান্ড লাইনে ব্যবহারের সহজতা সতেজ ছিল res
অ্যাভেলিস

1
আমি সেখানকার নামটিতে শ্লেষ পছন্দ করি - হ্যাঁ আপনি আপনার সিএলওসি পরীক্ষা করে আপনি কতটা উত্পাদনশীল হয়ে উঠতে পারেন তা বলতে পারেন tell
বোবোবোবো

'./Cloc-1.56.pl' ক্লক সরঞ্জামটির পারম সংস্করণটি ডাউনলোড করতে উপরের লিঙ্কটি ব্যবহার করুন। নিশ্চিত করুন যে আপনি 'chmod u + x cloc-1.56.pl' কমান্ডটি ব্যবহার করে cloc-1.56.pl ফাইলটিতে এক্সিকিউশন অনুমতি সক্ষম করেছেন। যদি আপনার উত্স কোডটি ডিরেক্টরিতে 'প্রজেক্ট_কোড' তে থাকে তবে আপনাকে কেবল নিম্নলিখিত কমান্ডটি চালানো দরকার।
জেজেড

233

আমি এটিকে চারদিকে ভাসমান দেখছি এবং এটি নিজেই ব্যবহার করছি:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

2
আপনার প্রয়োজন মতো জায়গাগুলি সহ সাবডিয়ারগুলি পরিচালনা করতে: সন্ধান করুন। "(" -Name " .m" -অথবা -name " .mm" -অথবা -name "* .cpp" ")" -print0 | xargs -0 wc -l
ম্যাট__সি

2
এই ব্লগ পোস্টটি সাহায্য করতে পারে: allara.blogspot.co.uk/2010/12/…
এরিক ব্রোটো

12
আমরা SO- তে উত্তর পোস্ট করি, ব্লগ এন্ট্রিগুলির লিঙ্ক নয় যা অনেকগুলি একই উত্তর সরবরাহ করে।
জোশুয়া নউজি

6
এটি প্রদর্শিত হয়। মি এবং। মিমি পরীক্ষাগুলিতে একটি * অনুপস্থিত (সম্পাদিত: মনে হয় পূর্ববর্তী স্ল্যাশ ছাড়া এগুলি রেন্ডার করছে না) আমি এগুলি যুক্ত না করা পর্যন্ত উপরেরটি আমার পক্ষে কাজ করছে না: সন্ধান করুন। "(" -নাম "*। এম" -ও-নাম "*। মিমি" -অর-নাম "* .সিপি" ")" -প্রিন্ট 0 | xargs -0 wc -l
ব্লেডম্যান

2
সুইফ্ট ব্যবহারকারীদের জন্য নোট - ফাইল এক্সটেনশান সহ অন্য 'বা' প্রতিস্থাপন করুন বা যুক্ত করুন। সুইফট
বায়রন

79

আমি উল্লিখিত হিসাবে সিএলওসি ব্যবহার করেছি এবং এটি ব্যবহার করা মোটামুটি সহজ। এটি একটি পার্ল স্ক্রিপ্ট যা আপনি আপনার প্রকল্প ডিরেক্টরি থেকে যোগ করতে এবং চালাতে পারেন।Nathan Kinsinger

পার্ল ইতিমধ্যে ম্যাক ওএসের অংশ এবং আপনার লিখিত সংখ্যাগুলির সন্ধানের জন্য আপনি এইভাবে স্ক্রিপ্টটি আবেদন করতে পারেন:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

এটি এই জাতীয় আদেশ থেকে প্রাপ্ত আউটপুটের একটি উদাহরণ:

   176 text files.
   176 unique files.                                          
     4 files ignored.

http://cloc.sourceforge.net v 1.56  T=2.0 s (86.0 files/s, 10838.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     80           3848           1876          11844
C/C++ Header                    92            980           1716           1412
-------------------------------------------------------------------------------
SUM:                           172           4828           3592          13256
-------------------------------------------------------------------------------

4
নিস! আমি আমার নিজের উত্তর চেয়ে ভাল এটি পছন্দ। :-)
জোশুয়া নোজি ২

1
আপনাকে প্রথমে স্ক্রিপ্টটি ডাউনলোড করতে হবে। তারপরে সেই স্ক্রিপ্টটি যেখানে রয়েছে সেই ডিরেক্টরিতে নেভিগেট করুন এবং আপনি যে কোনও ফাইলের নাম ডাউনলোড করেছেন সেই আদেশটি চালান।
prolfe

ক্লোক পার্ল হতে হবে .১.৫6.পিএল। / আপনার নির্দেশিকাও কোথায় আপনার সোর্সগুলি এবং উপরের মতো নয়, আপনি যদি স্ক্র্যাচ থেকে পার্ল ইনস্টল করেন তবে নিশ্চিত হয়ে নিন যে আপনি বর্তমান পার্ল সংস্করণটি প্রবেশ করেছেন (খনিটি মূলত 5.30.1 ছিল তাই ক্লোক পার্ল-5.30.1.pl ./)
গোলান শায়

1
একটি শেষ কথা, আমাকে ত্রুটি হিসাবে স্প্যান মু চালাতে হয়েছিল যা এটি প্রথমবারের মতো চালানোর সময় উপস্থিত হয়েছিল তাই সেই একজনের জন্য চেকআউট করুন
গোলান শায়

50

টার্মিনাল.এপ খুলুন, আপনার প্রকল্পের মূল ডিরেক্টরিতে যান এবং এই আদেশটি চালান:

কেবল সুইফ্টের জন্য:

find . \( -iname \*.swift \) -exec wc -l '{}' \+

কেবল ওবজে-সি এর জন্য:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+

ওবজে-সি + সুইফ্টের জন্য:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+

ওবজে-সি + সুইফ্ট + সি + সি ++ এর জন্য:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+

টার্মিনাল দ্রুত টিপস:
ls: ডিরেক্টরি ডিরেক্টরি বিষয়বস্তু
সিডি: ডিরেক্টরি পরিবর্তন করুন
স্বাবলম্বনে ট্যাব টিপুন
স্পেসের আগে "\" ব্যাকস্ল্যাশ রাখার কথা মনে রাখবেন
মূল প্রকল্প থেকে একটি ফোল্ডার নামানোর পরামর্শ দিচ্ছি যাতে আপনি ফ্রেমওয়ার্ক থেকে কোড গণনা থেকে মুক্তি পাবেন


44

টার্মিনালে, প্রকল্প ডিরেক্টরিতে পরিবর্তন করুন এবং চালান:

find . -type f -print0 | xargs -0 cat | wc -l

আপনি যদি কেবলমাত্র কিছু নির্দিষ্ট ফাইল টাইপ চান তবে এর মতো কিছু চেষ্টা করুন

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l

দুর্দান্ত, তবে মন্তব্যগুলি এবং ফাঁকা লাইনগুলি অন্তর্ভুক্ত করে এবং তাই ঠিক যা চাওয়া হয়েছিল তা নয়। একটি এলওসি পরিমাপ যতটা সম্ভব কোড ফর্ম্যাটিং শৈলীর চেয়ে স্বতন্ত্র হওয়া উচিত এবং এইভাবে একটি ফাইলে লজিক্যাল অংশগুলির মধ্যে ফাঁকা লাইন বা মন্তব্যগুলির একগুচ্ছ সমষ্টি হিসাবে গণনা করা উচিত নয়।
বাসিম

34

এক্সকোড পরিসংখ্যানবিদ দেখুন, এটি আপনি যা চান ঠিক তা করে। এটি অন্যান্য আকর্ষণীয় পরিসংখ্যানও সরবরাহ করে তাই মজাদার জন্য এখন এবং তারপরের জন্য উপযুক্ত।

মনে রাখবেন যে এটি প্রকৃত ফোল্ডারগুলির মধ্যে দেখতে পাবে না, যদিও এটি গোষ্ঠীতে দেখাবে। প্রতিক্রিয়া হ'ল আপনি আসল ফোল্ডারগুলি ব্যবহার করছেন না তাই এটি দুর্দান্ত কাজ করবে। আপনি যদি ফোল্ডার ব্যবহার করছেন তবে আপনাকে কেবল প্রতিটি ফোল্ডারে গণনা করতে হবে এবং সেগুলি একসাথে যুক্ত করতে হবে।

দ্রষ্টব্য: ২০১২ সালের জুন পর্যন্ত, এটি Xcode এর সর্বশেষ সংস্করণগুলির সাথে সঠিকভাবে কাজ করে না বলে মনে হচ্ছে।


যারা উদ্দেশ্যমূলক-সি এবং সি / সি ++ মেশান তাদের জন্য কেবল একটি শীর্ষস্থানীয়: এটি * .c বা * .cpp ফাইল গণনা করে না।
এমিল কর্মিয়ার

3
নোট করুন যে এক্সকোড স্ট্যাটিসিশিয়ান আপনার পয়েন্টে এই মুহুর্তে আপনার প্রকল্পের সাবডিয়ারদের সাথে ডিল করেন না।
ম্যাট__সি

@ ম্যাট__ সি আই, তাই "নোট করুন এটি প্রকৃত ফোল্ডারগুলির ভিতরে দেখবে না"। বেশ খানিকটা ম্যানুয়াল কাজ, দুর্ভাগ্যক্রমে (এবং পুনরাবৃত্ত ফোল্ডার অনুসন্ধান কোডিং সহজ), তবে এটি কার্যক্ষম।
ম্যাথু ফ্রেডেরিক

1
দেখে মনে হচ্ছে সিংহের এক্স-কোড ৪.২ প্রকল্পের সাথে এটি মোটেও কাজ করে না (কমপক্ষে এটি আমার প্রকল্পের কোনও পরিসংখ্যান
দেয়নি

আহ, বামার, এটি এখন পুরানো হতে পারে।
ম্যাথু ফ্রেডেরিক

31
  1. ওপেন টার্মিনাল
  2. আপনার প্রকল্পে নেভিগেট করুন
  3. আপনার প্রকল্পের ভিতরে নিম্নলিখিত কমান্ড কার্যকর করুন:

    find . -path ./Pods -prune -o -name "*.swift" -print0 ! -name "/Pods" | xargs -0 wc -l

    বা:

    find . -path ./Pods -prune -o -name "*[hm]" -print0 ! -name "/Pods" | xargs -0 wc -l

(* পড ফাইলগুলি মোট গণনা থেকে গণনা বাদে)


16

আপনি যদি টার্মিনালে আপনার প্রকল্পের ডিরেক্টরিতে যান এবং প্রবেশ করুন:

find . "(" -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.hpp" -or -name "*.cpp"  -or  -name "*.c" -or -name "*.cc" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

এটি আপনাকে একটি প্রকল্প ভাঙ্গা দেবে, পাশাপাশি প্রতিটি ফাইলের জন্য এবং সামগ্রিকভাবে প্রকল্পের জন্য লাইন মোট দেয়।


দ্রুতগতি জন্য শুধু সবকিছু মুছে ফেলেছি এবং যোগ .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne

@WCByrne বিকল্পভাবে, আমরা কেবলমাত্র মূল কমান্ডে সুইট যুক্ত করতে পারি
RileyE

প্রকৃতপক্ষে. যেহেতু বেশিরভাগ লাইব্রেরি এবং ধার করা কোড এখনও রয়েছে hh & .m এটি আমার লেখাটি কেবল গণনাটি ছাঁটাইতে সহায়তা করেছিল।
WCByrne

1
একেবারে। প্রত্যেকেরই নিজস্ব সমাধান রয়েছে। এবং যদি তাদের নিজস্ব উপসর্গ থাকে (উদাহরণস্বরূপ: "আরই"), তারা এমনকি করতে পারতfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
রিলে ই

9

নোজি-র সংস্করণটি আমার পক্ষে কাজ করে না, তবে এটি একটি:

find . -type f -print0 | xargs -0 cat | wc -l

1
সংক্ষিপ্ত এবং সংক্ষিপ্ত - তবে এটি অ-উত্স-কোড ফাইলগুলিতে লাইনগুলিও গণনা করে। সুতরাং প্রকৃতপক্ষে ফাইলের নাম-এক্সটেনশন ফিল্টারিং এখানে গুরুত্বপূর্ণ। ওপি "উত্স কোড লাইন" গণনা করতে চেয়েছিল। কোন পাঠ্য লাইন না।
মোটি শ্নের

7

একটি দ্রুত এবং সহজ উপায়:

একটি রেজেক্স অনুসন্ধান ব্যবহার করুন (নেভিগেটর সন্ধান করুন, সন্ধান করুন> নিয়মিত এক্সপ্রেশন নির্বাচন করুন)।

করুন। \ N

এক্সকোড অনুসন্ধানের স্কোপগুলির সাথে সুবিধাজনকভাবে কাজ করে এবং আপনি যে ধরণের লাইনে গণনা করতে চান তা সহজেই এটিকে কাস্টমাইজ করতে পারেন;)।


এখন এটি একটি দুর্দান্ত! দ্রুত নয়, দেব পরিবেশ ছাড়াই। আমি এটা পছন্দ করি. সম্ভবত আরও ভাল নিয়মিত প্রকাশটি সাদা-স্পেস লাইন এবং এর মতো জিনিসগুলি গণনা এড়াতে পারে।
মোটি শ্নের

সহজবোধ্য রাখো. আমি এটা পছন্দ করি.
ডিভাইস 1

6

আপনি ম্যাকপোর্টের মাধ্যমে এসএলওসকাউন্ট ইনস্টল করতে পারেন । অথবা, আরও অদ্ভুতভাবে, আপনি ডাব্লুসি-ল ব্যবহার করতে পারেন।


সিএলওসি এসসিএলোকাউন্টের উপর ভিত্তি করে তাই আমার ধারণা এটি এখনও
সিএলওসি

4
"বিকাশের মোট আনুমানিক ব্যয় = $ 1,934,715"। এটি আমার দিন তৈরি!
ভ্যালারি ভ্যান

4

আমি এক্সকোডের সাথে পরিচিত নই, তবে আপনার যদি প্রয়োজন কেবল ডিরেক্টরি গাছের মধ্যে থাকা সমস্ত নির্দিষ্ট ফাইলের লাইন সংখ্যা গণনা করা হয় তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

find .... match of all those files ... -exec wc -l {} +

অনুসরণ করছেন জশুয়া Nozzi এর উত্তর , এ গনুহ এটি এই ধরণের ফাইলগুলিকে মত হবে জন্য রেগুলার এক্সপ্রেশন:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -exec wc -l {} +

অথবা এমনকি

find -regex ".*\.\(m\|mm\|cpp\|swift\)$" -exec wc -l {} +

এটি , বা .m, এ শেষ হওয়া সমস্ত ফাইলের সাথে মেলে নিয়মিত অভিব্যক্তি ব্যবহার করে । ফাইল সন্ধানে রেজেেক্স কীভাবে ব্যবহার করতে হয় সেগুলিতে আপনি এই এক্সপ্রেশন সম্পর্কে আরও তথ্য দেখতে পারেন ।.mm.cpp.swift

আপনি যদি ম্যাক ওএস সন্ধানের সাথে কাজ করছেন , তবে আপনার কিছুটা ভিন্ন পদ্ধতির প্রয়োজন, যেমন মন্তব্যগুলিতে মতি শ্নোর ব্যাখ্যা করেছেন :

find -E . -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l {} +

উভয়ই এই আকারে আউটপুট সরবরাহ করবে:

234 ./file1
456 ./file2
690 total

সুতরাং আপনি এটি হয় এটির মতো রাখতে পারেন বা কেবল পাইপ করতে পারেন tail -1(যা find ... | tail -1), যাতে আপনি কেবল সর্বশেষ পংক্তিটি সর্বমোট হয়ে যান।


ওয়েল --- ফাইন্ড -রেজেক্স "। * etc। ইত্যাদি ম্যাকস-এ আমার জন্য কাজ করে না - এটি একটি অবৈধ বিকল্পের দাবি করেছে - বা আপনি কী ধরণের সন্ধান করছেন?
মোটি শ্নের

@ মোটিশ্নোর আপনি সম্ভবত এই প্রশ্নটি তারা \|এবং ম্যাকোজে অন্যদের বিষয়ে কোথায় কথা বলছেন তা পরীক্ষা করতে চান । --regexজিএনইউ অনুসন্ধান (আমি যেটি ব্যবহার করি) এবং ম্যাকোস উভয় ক্ষেত্রেই বৈধ।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

ভাল --- না। আমি ম্যাকোজে খুঁজে পেয়েছি আপনাকে অবশ্যই বর্ধিত নিয়মিত অভিব্যক্তিগুলির জন্য অনুসন্ধান করতে হবে। ওএস-এক্স আপনি যেটি পেতে পারেন তার উপরে প্রস্তাবিত কমান্ডটি অনুলিপি করুন এবং নিজের জন্য দেখুন। ম্যাকোস-এক্স-এ থাকা লোক আপনাকে জানায় যে এর জন্য আপনাকে অবশ্যই আবশ্যক।
মোটি শ্নের

অবশেষে, আপনাকে অবশ্যই একটি পথ প্রদান করতে হবে যেখানে ওএসএক্সে অনুসন্ধান করতে হবে। সুতরাং যে প্রকরণটি কাজ করে, এর মতো দেখাচ্ছে: সন্ধান করুন -ই। -regex "।। * \ ([HMC] | মিমি | CP + + | দ্রুতগতি | pch) $" -exec wc-l {} + +
Motti Shneor

@ মতিশ্নোর ম্যাকওএস-এ এই পদ্ধতিটি সরবরাহ করার জন্য ধন্যবাদ। আমি উত্তর দিয়ে আপডেট করেছি।
ফেডোরকি 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

2

পুনরাবৃত্তি করার জন্য দুঃখিত। এটিই সবচেয়ে সহজ উপায় আইএমএইচও:

  1. টার্মিনাল টাইপ

find /users/<#username#>/documents/folderWithProject/ -type f -exec cp {} /users/<#username#>/documents/folderWithProject/newFolder/ \;

এটি প্রকল্প ফোল্ডার থেকে সমস্ত ফাইল অনুলিপি করবে newFolder

  1. এক্সকোড পরিসংখ্যানবিদ ডাউনলোড করুন এবং এটি দিয়ে ব্যবহার করুনnewFolder এখানে চিত্র বর্ণনা লিখুন

এই সরঞ্জামটি সমস্ত কিছুই খুঁজে পায় না, এটি দেখতে আরও বেশি ভাল লাগে যেমন এটি কেবল বর্তমান ফোল্ডারে দেখায় (এমনকি সাবফোল্ডারও নয়)
ড্যানিয়েল

আমি লিখেছি যে প্রথম পদক্ষেপটি হ'ল প্রকল্পের ফোল্ডার থেকে সমস্ত ফোল্ডারকে একটি ফোল্ডারে অনুলিপি করা।
নিক কোভ 14

যে "XcodeStatistican" কোনও সুযোগ দ্বারা উন্মুক্ত উত্স? আমি এটিকে কোনও প্রকল্পের কাঠামোতে অকার্যকর করে ফেলতে চাই ... ডিরেক্টরি এবং ফাইল পুনরাবৃত্তি করা খুব কঠিন নয়। এছাড়াও - এখান থেকে ডাউনলোড - কোনও সনাক্তকারী বিকাশকারী স্বাক্ষরিত নয় - তাই ম্যালওয়্যার হতে পারে: /
মটি শ্নের

1

line-counterএকটি ভাল বিকল্প। এটি সিএলওসি থেকে হালকা এবং অন্যান্য কমান্ডের চেয়ে অনেক বেশি শক্তিশালী এবং ব্যবহার করা সহজ।

একটি দ্রুত ওভারভিউ

এভাবেই আপনি সরঞ্জামটি পান

$ pip install line-counter

lineবর্তমান ডিরেক্টরি অধীনে ফাইল সংখ্যা এবং লাইন গণনা পেতে কমান্ড ব্যবহার করুন (পুনরাবৃত্তভাবে)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

আপনি যদি আরও বিশদ চান, কেবল ব্যবহার করুন line -d

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

এবং এই সরঞ্জামটির সেরা অংশটি হ'ল আপনি এটিতে কনফিগার ফাইলের মতো .gitignore যুক্ত করতে পারেন। আপনি '.gitignore' এ যা করেন ঠিক তেমন ফাইলগুলি গণনা করতে বা তা উপেক্ষা করার জন্য আপনি বিধিগুলি সেট করতে পারেন। হ্যাঁ, এই সরঞ্জামটি কেবল আমার কতগুলি লাইন সহজ করেছে তা জানার জন্য উদ্ভাবিত।

আরও বিবরণ এবং ব্যবহার এখানে: https://github.com/MorganZhang100/line-counter

আমি এই সাধারণ সরঞ্জামটির লেখক। আশা করি এটি কারও সাহায্য করতে পারে।

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