2009-03-06 13 views
18

मैं पर्ल से एक फाइल को लिखने की कोशिश कर रहा हूं। मैं सिर्फ टैब सीमित प्रारूप में डेटा लिखना चाहता हूं। हालांकि, जो डेटा मैं लिख रहा हूं वह अलग-अलग लंबाई है और इसमें अस्तर नहीं है।मैं पर्ल में गठबंधन कॉलम में टेक्स्ट कैसे लिखूं?

Name Education Fav_Car MoneyInBank 
josh High School Porche 500 
SomeOtherName PHD Hyundai 50000 

मैं बस चाहता हूँ डेटा हेडर मैं शीर्ष पर है कि के साथ पंक्तिवाला जा करने के लिए:

उदाहरण के लिए मैं कुछ इस तरह लिखने की कोशिश कर रहा हूँ।

मैं तो जैसे डेटा outputting हूँ:

printf FILE ("%s%20s%20s\n", "Name", "Ed", "Car"); 
while (($name, $ed, $car) = $sth->fetchrow_array) { 
     printf FILE ("%s>>>>>>>>>>>>>%40s%40s\n", $name, $ed, $car); 
}; 

उत्तर

26

टैब-सीमित डेटा नहीं मिलाया गया है, जब एक पाठ संपादक में खोला (जहां क्षेत्रों लंबाई में संगत नहीं हैं)।

समाधान:

  • खुला एक स्प्रेडशीट में फ़ाइल।
  • इसे एक वर्ड प्रोसेसर में खोलें, सभी टेक्स्ट का चयन करें, और उपयुक्त टैब स्टॉप को परिभाषित करें। (धन्यवाद, Justsalt)
  • अपने टेक्स्ट एडिटर में, अपनी टैब चौड़ाई को अपने किसी भी फ़ील्ड से बड़े मान पर सेट करें।
  • टैब की बजाय रिक्त स्थान का उपयोग करें (उदा।, printf फ़ील्ड चौड़ाई के साथ, या formats)।

उदाहरण के लिए, आप का उपयोग कर सकते

printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash); 

-% के बाद का कारण बनता है क्षेत्र उचित छोड़ा जा सकता। संख्याएं (जैसे पैसे) आम तौर पर सही-सही होती हैं (जो डिफ़ॉल्ट है)।

+1

या इसे एक वर्ड प्रोसेसर में खोलें और उपयुक्त टैब स्टॉप को परिभाषित करें। – Justsalt

6

पर्ल format कमांड पर एक नज़र डालें।

+0

मैं किसी भी नई परियोजनाओं के लिए प्रारूप का उपयोग नहीं करता, इसके बजाय Perl6 :: फॉर्म का उपयोग करें। –

1

printf 20 चरित्र क्षेत्रों के लिए सी में के रूप में इस करता है:

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money); 
+0

क्या उन्हें उचित ठहराने के लिए% -20 होने की आवश्यकता है? –

+0

मैं उन्हें उचित कैसे छोड़ सकता हूं? –

+0

@styris: इस सवाल पर डैनियल एल की टिप्पणी देखें! –

2

रास्ता सी printf के अलावा आप गतिशील रूप से "*" चौड़ाई समायोजित कर सकते हैं,

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car"); 
1

आप लिनक्स पर काम कर रहे हैं, एक आसान समाधान column प्रणाली आदेश का उपयोग करने के लिए, के साथ हो सकता है - टी झंडा बस स्पेस से अलग तालिका को फ़ाइल में प्रिंट करें, और उस फ़ाइल पर कॉलम कमांड का उपयोग करें।

system("column -t file > new_file"); 
संबंधित मुद्दे