Hi,
I have recently used SplFileObject to work with files. I was lacking a bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array and check
it size, I thought it would be nice to have SplFileObject Countable.
Here is an example implementation I made tonight that seems to work well -
https://gist.github.com/866767 . Is it something you think would be worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking 'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with the
stream itself.
If it's fine I can write some unit tests to cover this and then submit a
complete patch.
Regards
Sebastian Marek
proofek@gmail.com
Follow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek
Hi,
I have recently used SplFileObject to work with files. I was lacking a bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array and check
it size, I thought it would be nice to have SplFileObject Countable.Here is an example implementation I made tonight that seems to work well -
https://gist.github.com/866767 . Is it something you think would be worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking 'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with the
stream itself.
In my oppinion, it does not make sense to implement countable for this
use. Countable should be implemented on classes where calling count()
on
them is not ambiguous, i.e. the size of a collection.
There is no reason why count()
on a file should be the number of lines,
why not words, or bytes?
I'd however be happy with a new countLines() method.
Best,
If it's fine I can write some unit tests to cover this and then submit a
complete patch.Regards
Sebastian Marek
proofek@gmail.comFollow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek
Hello,
That makes perfect sense. I have raised a feature request and have attached
a patch containing both countLines() method implementation and phpt tests.
thx
Hi,
I have recently used SplFileObject to work with files. I was lacking a
bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array and
check
it size, I thought it would be nice to have SplFileObject Countable.Here is an example implementation I made tonight that seems to work well
https://gist.github.com/866767 . Is it something you think would be
worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking
'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with
the
stream itself.In my oppinion, it does not make sense to implement countable for this
use. Countable should be implemented on classes where callingcount()
on
them is not ambiguous, i.e. the size of a collection.There is no reason why
count()
on a file should be the number of lines,
why not words, or bytes?I'd however be happy with a new countLines() method.
Best,
If it's fine I can write some unit tests to cover this and then submit a
complete patch.Regards
Sebastian Marek
proofek@gmail.comFollow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
http://twitter.com/proofek
--
Sebastian Marek
proofek@gmail.com
Follow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek
Hi Sebastian,
Since Etienne brought it up, would it not also make sense for you to
implement countWords() and countBytes()?
Also, unicode issues aside, it might still be nice to implement
countChars().
And finally, so that it provides all most of the functionality of the
GNU wc program, there could also be getMaxLineLength(). This would need
a different name however as this method would be to count the longest
line of the file rather than indicate the maximum length of a line to
read as the current SplFileObject::getMaxLineLen() method does.
Just my thoughts,
Nick
Hello,
That makes perfect sense. I have raised a feature request and have attached
a patch containing both countLines() method implementation and phpt tests.thx
Hi,
I have recently used SplFileObject to work with files. I was lacking a
bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array and
check
it size, I thought it would be nice to have SplFileObject Countable.Here is an example implementation I made tonight that seems to work well
https://gist.github.com/866767 . Is it something you think would be
worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking
'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with
the
stream itself.In my oppinion, it does not make sense to implement countable for this
use. Countable should be implemented on classes where callingcount()
on
them is not ambiguous, i.e. the size of a collection.There is no reason why
count()
on a file should be the number of lines,
why not words, or bytes?I'd however be happy with a new countLines() method.
Best,
If it's fine I can write some unit tests to cover this and then submit a
complete patch.Regards
Sebastian Marek
proofek@gmail.comFollow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek
Hi all,
Hi Sebastian,
Since Etienne brought it up, would it not also make sense for you to
implement countWords() and countBytes()?
For countBytes() how is that different from SplFileInfo's getSize() ?
As for countWords() and the others, I think this crosses the line (in
my view) over what a "File Object" should provide.
Also, unicode issues aside, it might still be nice to implement
countChars().And finally, so that it provides all most of the functionality of the GNU wc
program, there could also be getMaxLineLength(). This would need a
different name however as this method would be to count the longest line of
the file rather than indicate the maximum length of a line to read as the
current SplFileObject::getMaxLineLen() method does.Just my thoughts,
Nick
Hello,
That makes perfect sense. I have raised a feature request and have
attached
a patch containing both countLines() method implementation and phpt tests.
Having not looked at the implementation yet, I have no comments on the
patch itself. However, I would prefer a "get" prefixed method name,
getLineCount() or similar.
thx
On Sun, Mar 13, 2011 at 9:39 PM, Etienne Kneusscolder@php.net wrote:
Hi,
I have recently used SplFileObject to work with files. I was lacking a
bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array andcheck
it size, I thought it would be nice to have SplFileObject Countable.
Here is an example implementation I made tonight that seems to work well
https://gist.github.com/866767 . Is it something you think would be
worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with
the
stream itself.
In my oppinion, it does not make sense to implement countable for this
use. Countable should be implemented on classes where callingcount()
on
them is not ambiguous, i.e. the size of a collection.There is no reason why
count()
on a file should be the number of lines,
why not words, or bytes?I'd however be happy with a new countLines() method.
Best,
If it's fine I can write some unit tests to cover this and then submit a
complete patch.Regards
Sebastian Marek
proofek@gmail.comFollow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek
For countBytes() how is that different from SplFileInfo's getSize() ?
As for countWords() and the others, I think this crosses the line (in
my view) over what a "File Object" should provide.
Hi Peter & Sebastian,
Bah. It isn't. Obviously that was going to exist already, but was
thinking about methods looking like countXXXXX() too much :)
Perhaps you are right, Peter, on your opinions about what a "file
object" should provide. I would think, in that case, that a
getLineCount() shouldn't exist on the "file object" either.
Currently we have:
SplFileInfo -- information/metadata about a file.
|
V
SplFileObject -- modify/access contents of a file.
It could make sense to subclass this to provide methods for accessing
information about the contents of a file. As for a name, I'm not sure
what would be best, but perhaps something like "SplFileData". Maybe
someone else can come up with a better name?
Then you could have the following methods:
getByteCount() -- the same as getSize(), but for here for consistency.
getCharCount()
getLineCount()
getWordCount()
getLongestLine()
Another consideration is how these should behave if we have a binary
file - am not sure what GNU wc does, but perhaps that is a starting
point for deciding what should happen.
Also thought might be given to what other useful methods could be
provided for getting information about the contents of a file. Some
ideas (sensible or otherwise!):
getShortestLine()
getEolFormat()
setEolFormat() -- allow switching between LF, CR and CRLF.
getLineIndent() -- Could return '\t', ' ', ' ', etc.
setLineIndent()
hasEmptyLines()
hasTrailingWhiteSpace()
...
It may also make sense to cache the result while the file is not
modified as some of these operations could be expensive.
Anyway - I'll stop rambling. I think this would be better than just
hacking in a method for the sake of it.
Cheers,
Nick
Currently we have:
SplFileInfo -- information/metadata about a file.
|
V
SplFileObject -- modify/access contents of a file.It could make sense to subclass this to provide methods for accessing
information about the contents of a file. As for a name, I'm not sure what
would be best, but perhaps something like "SplFileData". Maybe someone else
can come up with a better name?
probably SplTextFileObject, as these methods make sense for text files
--
Alexey Zakhlestin, http://twitter.com/jimi_dini
http://www.milkfarmsoft.com/
Hello Nick,
Might be fun, I'll have a look at it. Is the stuff I have done so far any
good? I've got only a little C experience, so any feedback is good!
cheers
Hi Sebastian,
Since Etienne brought it up, would it not also make sense for you to
implement countWords() and countBytes()?Also, unicode issues aside, it might still be nice to implement
countChars().And finally, so that it provides all most of the functionality of the GNU
wc program, there could also be getMaxLineLength(). This would need a
different name however as this method would be to count the longest line of
the file rather than indicate the maximum length of a line to read as the
current SplFileObject::getMaxLineLen() method does.Just my thoughts,
Nick
Hello,
That makes perfect sense. I have raised a feature request and have
attached
a patch containing both countLines() method implementation and phpt tests.thx
Hi,
I have recently used SplFileObject to work with files. I was lacking a
bit
of functionality in there regarding counting number of lines in a given
file. Although I could just load contents of the file to an array andcheck
it size, I thought it would be nice to have SplFileObject Countable.
Here is an example implementation I made tonight that seems to work well
https://gist.github.com/866767 . Is it something you think would be
worth
adding to the existing SplFileObject? Is the implementation any good? I
reused some of the existing logic to avoid breaking'spl_filesystem_object'
internal integrity, but maybe it would make sense to make it work with
the
stream itself.
In my oppinion, it does not make sense to implement countable for this
use. Countable should be implemented on classes where callingcount()
on
them is not ambiguous, i.e. the size of a collection.There is no reason why
count()
on a file should be the number of lines,
why not words, or bytes?I'd however be happy with a new countLines() method.
Best,
If it's fine I can write some unit tests to cover this and then submit a
complete patch.Regards
Sebastian Marek
proofek@gmail.comFollow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
http://twitter.com/proofek--
--
Sebastian Marek
proofek@gmail.com
Follow me online at:
Blog: http://criticallog.thornet.net/
Twitter: http://twitter.com/proofek
Linkedin: http://uk.linkedin.com/in/sebastianmarek
Ohloh: http://www.ohloh.net/accounts/proofek
<http://twitter.com/proofek