तो, मैं (fgets के लिए एक रास्ता) सी में एक पाठ फ़ाइल में एक विशिष्ट लाइन, एक और अधिक स्थायी बफर में लाइन की सामग्री की प्रतिलिपि करने के लिए खोजने की कोशिश कर रहा हूँ:सी में फ़ाइल से एक विशिष्ट रेखा fgets() कैसे करें?
अनिवार्य रूप से, मैं सोच रहा था अगर वहाँ कि निम्नलिखित कोड को कुछ इसी तरह के बिना ऐसा करने के लिए एक तरीका था:
FILE *fp;
fp = fopen(filename, "r");
char line[256];
char * buffer;
int targetline = 10;
while(targetline > 0)
{
fgets(line, 256, fp)
}
buffer =(char*)malloc(sizeof(char) * strlen(line));
strcpy(buffer, line);
तो मूल रूप से
मैं फ़ाइल n-1 बार सिर्फ वें लाइन को पाने के लिए के माध्यम से पुनरावृति नहीं करना चाहता ... यह सिर्फ नहीं करता है बहुत कुशल प्रतीत नहीं होता है (और, यह होमवर्क है, मुझे 100% हाहा प्राप्त करने की आवश्यकता है)।
किसी भी मदद की सराहना की जाएगी।
यदि आपकी लाइनों में मनमानी लंबाई हो सकती है, तो आप निरंतर समय में 'n' लाइनों को छोड़ने की अपेक्षा कैसे करते हैं? –
एकमात्र वास्तविक विकल्प यह है कि प्रत्येक पंक्ति कहां शुरू होती है (एक बार फ़ाइल को पढ़ें, इंडेक्स बनाएं, फिर आप इसे तब तक लाइन तक ढूंढने के लिए उपयोग करें जब तक फ़ाइल बदलती न हो)। यह भी ध्यान रखें कि आपके 'malloc' को एनयूएल टर्मिनेटर के लिए स्पेस छोड़ने के लिए 1 जोड़ने की आवश्यकता है। –
पाठ फ़ाइलों को संग्रहीत करने के लिए कुछ तंत्र दृढ़ता से एनएच लाइन तक निरंतर समय तक पहुंचने का तरीका प्रदान कर सकते हैं, या कम से कम रैखिक समय से बेहतर हो सकते हैं। संभवतः वीएमएस पर इस्तेमाल किए गए कुछ फ़ाइल प्रारूप यह करते हैं। लेकिन सी मानक लाइब्रेरी ऐसी किसी भी तंत्र का पर्दाफाश नहीं करती है, और अधिकांश ऑपरेटिंग सिस्टम पर यह सादे पाठ फ़ाइलों के लिए भी संभव नहीं है, जब तक कि आप स्वयं एक इंडेक्स नहीं बनाते। तो यह एक अनुचित सवाल नहीं है - लेकिन जवाब नहीं है। –