php

2011-08-12 5 views
21

में कंसोल पर संरेखण कैसे करें मैं PHP में कमांड प्रॉम्प्ट के माध्यम से एक स्क्रिप्ट चलाने और टैब्यूलर रूप में परिणाम दिखाने की कोशिश कर रहा हूं। लेकिन शब्दों की अलग-अलग वर्ण की लंबाई के कारण मैं परिणाम को सही ढंग से संरेखित करने में सक्षम नहीं हूं।php

मैं इस

बुक ISBN विभाग ऑपरेटिंग सिस्टम 101 सीएस सी 102 सीएस जावा 103 सीएस

किसी को भी मदद कर सकता हूँ कृपया मुझे कंसोल पर php में इस तरह इस उत्पादन प्राप्त करने के लिए की तरह परिणाम चाहते हैं।

अग्रिम

उत्तर

43

आप नहीं चाहते हैं धन्यवाद पुस्तकालयों का उपयोग करने के लिए (या किसी कारण से अनुमति नहीं है), तो आप मानक php printf/sprintf कार्यों का उपयोग कर सकते हैं।

उनके साथ समस्या यह है कि यदि आपके पास चर और गैर-सीमित चौड़ाई वाले मान हैं, तो आपको यह तय करना होगा कि लंबे मानों को छोटा कर दिया जाएगा या तालिका के लेआउट को तोड़ दिया जाएगा।

पहला मामला:

// fixed width 
$mask = "|%5.5s |%-30.30s | x |\n"; 
printf($mask, 'Num', 'Title'); 
printf($mask, '1', 'A value that fits the cell'); 
printf($mask, '2', 'A too long value the end of which will be cut off'); 

उत्पादन

| Num |Title       | x | 
| 1 |A value that fits the cell  | x | 
| 2 |A too long value the end of wh | x | 

दूसरा मामला है:

// only min-width of cells is set 
$mask = "|%5s |%-30s | x |\n"; 
printf($mask, 'Num', 'Title'); 
printf($mask, '1', 'A value that fits the cell'); 
printf($mask, '2', 'A too long value that will brake the table'); 

और यहाँ हम

| Num |Title       | x | 
| 1 |A value that fits the cell  | x | 
| 2 |A too long value that will brake the table | x | 
मिल

यदि इनमें से कोई भी आपकी आवश्यकताओं को पूरा नहीं करता है और आपको प्रत्येक कॉलम में अधिकतम चौड़ाई मानों की गणना करने की अपेक्षा की जाती है, तो आपको वास्तव में चौड़ाई वाले कॉलम वाले टेबल की आवश्यकता होती है। लेकिन इस तरह PEAR::Console_Table बिल्कुल काम करता है।

+0

मैंने कोशिश की लेकिन स्प्रिंटफ मेरे मामले में काम नहीं कर रहा है :( – user519846

+0

क्यों? बहुत लंबे मूल्य तालिका को तोड़ते हैं? तो आपको पहले प्रत्येक कॉलम में सबसे लंबी स्ट्रिंग को खोजने की ज़रूरत होती है। यह वास्तव में एक पहिया को फिर से शुरू करने जैसा दिखता है, क्योंकि पीयर समाधान पॉवेटैक द्वारा सुझाए गए आपके लिए यह है। इसलिए मैं अपने उत्तर पर छोड़ देता हूं और उसका समर्थन करता हूं। – Hnatt

+0

+1 - यदि आप लाइब्रेरी (अभी तक) चुनना नहीं चाहते हैं, तो 'sprintf' स्वरूपित आउटपुट के लिए एक अच्छी शुरुआत है, चेक विभिन्न प्रारूप उपलब्ध हैं: http://php.net/manual/en/function.sprintf.php - आप अपनी तालिका की शीर्षलेख पंक्ति के साथ-साथ डेटा पंक्तियों के लिए एक ही मुखौटा का उपयोग कर सकते हैं। – hakre

28

आप PEAR::Console_Table उपयोग कर सकते हैं:

Console_Table आप एक टर्मिनल/खोल/कंसोल पर तालिका डेटा प्रदर्शित करने के लिए मदद करता है।

उदाहरण:

require_once 'Console/Table.php'; 

$tbl = new Console_Table(); 

$tbl->setHeaders(array('Language', 'Year')); 

$tbl->addRow(array('PHP', 1994)); 
$tbl->addRow(array('C', 1970)); 
$tbl->addRow(array('C++', 1983)); 

echo $tbl->getTable(); 

आउटपुट:

+----------+------+ 
| Language | Year | 
+----------+------+ 
| PHP  | 1994 | 
| C  | 1970 | 
| C++  | 1983 | 
+----------+------+ 
+0

पाउटैक - आपने मुझे कुछ सेकंड के भीतर उसी समाधान के साथ हराया! – dotbill

+0

@ बिली बॉब :) हाँ! – powtac

+0

त्वरित प्रतिक्रिया के लिए बहुत बहुत बोब धन्यवाद। मैं इसका पालन करूंगा। – user519846

7

आपका सबसे अच्छा विकल्प नाशपाती पैकेज Console_Table (http://pear.php.net/package/Console_Table/) का प्रयोग है।

उपयोग करने के लिए - एक कंसोल पर आप नाशपाती पैकेज स्थापित करने की जरूरत है, चल रहा है:

pear install Console_Table 

इस पैकेज को डाउनलोड करने और स्थापित करना चाहिए।

require_once 'Console/Table.php'; 

$tbl = new Console_Table(); 
$tbl->setHeaders(
    array('Language', 'Year') 
); 
$tbl->addRow(array('PHP', 1994)); 
$tbl->addRow(array('C', 1970)); 
$tbl->addRow(array('C++', 1983)); 

echo $tbl->getTable(); 
0

CLIFramework तालिका जनरेटर आप काम बहुत आसानी से किया जाता है और यह पाठ संरेखण, पाठ रंग, पृष्ठभूमि रंग, पाठ रैपिंग, पाठ अतिप्रवाह से निपटने .. आदि का समर्थन करता है पाने में मदद करता है: आप तो जैसे एक नमूना स्क्रिप्ट का उपयोग कर सकते हैं https://github.com/c9s/CLIFramework/wiki/Using-Table-Component

नमूना कोड: https://github.com/c9s/CLIFramework/blob/master/example/table.php

use CLIFramework\Component\Table\Table; 

$table = new Table; 
$table->setHeaders([ 'Published Date', 'Title', 'Description' ]); 
$table->addRow(array( 
    "September 16, 2014", 
    "Title", 
    "Description", 
    29.5 
)); 
$table->addRow(array( 
    "November 4, 2014", 
    "Hooked: How to Build Habit-Forming Products", 
    ["Why do some products capture widespread attention whil..."], 
    99, 
)); 
echo $table->render(); 
2

आप फिर से कोशिश कर सकते

यहाँ ट्यूटोरियल है सेंट सरल PHP लाइब्रेरी ConsoleTable यदि आप मानक PHP फ़ंक्शंस printf/sprintf या नाशपाती पैकेज PEAR::Console_Table का उपयोग नहीं करना चाहते हैं।

उदाहरण:

require_once 'ConsoleTable.php'; 

$table = new LucidFrame\Console\ConsoleTable(); 
$table 
    ->addHeader('Language') 
    ->addHeader('Year') 
    ->addRow() 
     ->addColumn('PHP') 
     ->addColumn(1994) 
    ->addRow() 
     ->addColumn('C++') 
     ->addColumn(1983) 
    ->addRow() 
     ->addColumn('C') 
     ->addColumn(1970) 
    ->display() 
; 

आउटपुट:

+----------+------+ 
| Language | Year | 
+----------+------+ 
| PHP  | 1994 | 
| C++  | 1983 | 
| C  | 1970 | 
+----------+------+ 

its github page में और अधिक उदाहरण उपयोगों देखें।

0

बहुत पुराना है, लेकिन मैं अब एक ही गर्त चला गया और str_pad इस्तेमाल किया, बस अपने स्तंभ का आकार के रूप में लंबाई सेट और यह thats

संबंध है।