我寫了一個Perl腳本,它打開一個由各種文件組成的目錄。看起來,腳本不會以任何順序讀取文件(不是按字母順序排列,也不是大小寫),而是隨機讀取它們。我想知道背後的原因是什麼?爲什麼Perl腳本以隨機順序從目錄中讀取文件?
回答
這是從來沒有隨機的,它只是在你不認識的模式。如果您查看描述您用來讀取目錄的任何函數的實現的文檔,它可能會這樣說,並不能保證讀取文件的順序。
如果你需要它們按照特定的順序,你對它們進行操作之前的名稱進行排序。
的文件在這方便的底層文件系統中的訂單可能讀取。所以,從某種意義上說,這些文件是有序的,但不是按照您期望的順序(大小或字母)。有時候,文件有一個內部的數字ID,並且這些文件可能以這個ID的數字順序返回。但是,這個ID是你可能不會經常遇到的東西,如果有的話。
同樣,結果是有序的,而不是隨機的。他們只是在你沒有預料到的順序。如果您需要訂購它們,請明確訂購。
它根據他們存儲在文件中的目錄的列表中的順序可能閱讀它們。在某些類似Unix的文件系統上,目錄本質上是一個無序的文件名和inode指向內容的列表(這是非常簡化的)。
有些編輯甚至會讓你編輯目錄文件,儘管你必須瞭解結構才能看到它的內容。 :) – 2009-06-11 01:43:43
如果你的腳本使用opendir()
(直接或間接),你不能假設它返回文件的順序排序任何東西;它將取決於您正在訪問的操作系統和文件系統的類型。有幾個選項是:
- 使用兩個循環:一個讀取所有文件名,第二個按照您需要的順序處理它們。
- 使用其他一些命令(如調用「
ls
」)強制在您需要的順序來返回的文件名。
在Perl中,除非你想做一個不平凡的排序,否則你會把名字讀入一個數組中並對數組進行排序,而不是使用'ls'(即使這樣,你會考慮是否使用Perl)。 – 2009-06-10 21:10:31
千萬不要低估調用程序的開銷。 – 2009-06-11 04:53:14
目錄條目並不存儲在有序和你不應該假設它們存儲的方式。如果你想對它們進行排序,你必須對它們進行排序。例如,比較以下輸出:
perl -e 'opendir DIR, "."; print join("\n", sort readdir(DIR)); print "\n";'
perl -e 'opendir DIR, "."; print join("\n", readdir(DIR)); print "\n";'
- 1. 使用perl腳本從目錄中讀取文件
- 2. 從文本文件中隨機讀取
- 3. 從目錄中選擇隨機文本文件並從中讀取c#
- 4. 從perl腳本輸出文件以供bash腳本讀取
- 5. 如何以排序順序讀取目錄中的文件?
- 6. 從linux中的目錄中讀取文件的順序
- 7. PHP - WordPress腳本從文本文件中獲取隨機文本
- 8. 巴什 - 從文件中讀取在同一目錄下的腳本文件
- 9. 爲什麼Cygwin CVS無法讀取Ruby/Perl腳本中的CVS密碼文件?
- 10. 從目錄中選擇隨機文件
- 11. 如何從文檔目錄中的子文件夾順序讀取文件iPhone
- 12. 爲什麼我的Perl腳本從文件中刪除字符?
- 13. 以隨機的方式讀取行,然後以隨機順序打印數字
- 14. Perl:讀取目錄,直到有文件
- 15. 的perl腳本 - 來讀取XML文件
- 16. 以隨機順序顯示記錄
- 17. 爲什麼pthread_create以隨機順序創建線程?
- 18. 如何以隨機順序和隨機時間複製文件?
- 19. 如何從應用程序目錄文本文件中讀取文本文件
- 20. 爲什麼Specs2以隨機順序運行這些「順序」測試?
- 21. 從文本文件中隨機讀取一行的函數
- 22. C++:從文本文件中讀取隨機行
- 23. 從文本文件中隨機讀取塊
- 24. 如何從文本文件中讀取隨機行?
- 25. 從文本文件中讀取隨機行到JLabel
- 26. Python。以隨機順序顯示項目
- 27. 我可以轉換此Perl腳本以使其從文件中讀取嗎?
- 28. 如何使用R以排序順序讀取目錄中的文件?
- 29. 從文本文件中讀取隨機文本到C中的文本框#
- 30. 在BASH腳本中按順序讀取文件
我們不是通靈;你可以發佈一些代碼嗎? – 2009-06-10 20:47:02