Re: CSV Files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 23, 2008 at 2:54 AM, Ashley Sheridan
<ash@xxxxxxxxxxxxxxxxxxxx> wrote:
> On Thu, 2008-10-23 at 02:26 -0400, Andrew Ballard wrote:
>> On Thu, Oct 23, 2008 at 2:22 AM, Ashley Sheridan
>> <ash@xxxxxxxxxxxxxxxxxxxx> wrote:
>> > On Wed, 2008-10-22 at 22:30 -0400, Andrew Ballard wrote:
>> >> On Wed, Oct 22, 2008 at 10:15 PM, Jason Todd Slack-Moehrle
>> >> <mailinglists@xxxxxxxxxxxxxxx> wrote:
>> >> > On Oct 22, 2008, at 6:58 PM, Stut wrote:
>> >> >
>> >> >> On 23 Oct 2008, at 02:41, Jason Todd Slack-Moehrle wrote:
>> >> >>>
>> >> >>> Actually i am ending the row headers with a chr(10); // LINE FEED
>> >> >>
>> >> >> From the code you included in your original post...
>> >> >>
>> >> >>> echo "/n";
>> >> >>
>> >> >>
>> >> >> There was no mention of chr(10).
>> >> >>
>> >> >> Outputting data in CSV format is not hard. Simply echo the header row if necessary, followed by "\n". Then output each line taking care to put string values in quotes which means you also need to escape quotes in the data. After each line echo "\n". That's really all there is to it.
>> >> >>
>> >> >> If you're still having problems I suggest you post the exact code you're using, anything else just makes it harder for us to provide effective help.
>> >> >>
>> >> >> -Stut
>> >> >>
>> >> >>> On Oct 22, 2008, at 5:12 PM, Stut wrote:
>> >> >>>
>> >> >>>> On 23 Oct 2008, at 00:59, Jason Todd Slack-Moehrle wrote:
>> >> >>>>>
>> >> >>>>> After I right out the column headers do I have to put a '/n' to have it start a new line in the CSV file? I think I do.
>> >> >>>>
>> >> >>>> A new line is \n not /n, and it must be in double quotes (") not single (').
>> >> >>
>> >> >
>> >> > Oh, I am not putting quotes around each field that i get from MySQL. There are no quotes in the data so that is good.
>> >> >
>> >> > Sorry I put "/n" and I meant to put chr(10).
>> >> >
>> >> > -Jason
>> >> >
>> >>
>> >> Jason, one of the points that Stut was trying to explain is that "\n"
>> >> and chr(10) are the same thing. They are just two different ways to
>> >> refer to a newline (line feed) character. Most of us probably use "\n"
>> >> rather than chr(10) in PHP, though. So, the following two lines are
>> >> equivalent:
>> >>
>> >> <?php
>> >> echo "Item1, Item2, Item3" . chr(10);
>> >>
>> >> // Note this uses double quotes.
>> >> echo "Item1, Item2, Item3\n";
>> >>
>> >> // It won't be the same at all if you use single quotes
>> >> echo 'Item1, Item2, Item3\n';
>> >>
>> >> ?>
>> >>
>> >> At any rate, you are correct that you need a line feed/newline
>> >> character at the end of every row in CSV including the header row.
>> >>
>> >> Andrew
>> >>
>> > A line feed and \n are not the same thing at all. Different operating
>> > systems implemented a different method of line endings depending on what
>> > they thought best, either a carriage return or line feed or both. a \n
>> > is meant to be an OS agnostic way of implementing this in the various
>> > programming languages, outputting something that any OS can understand
>> > in the intended way.
>> >
>> >
>> > Ash
>> > www.ashleysheridan.co.uk
>>
>> As I understood, \n was strictly a line feed (ASCII character 10), not
>> an "OS agnostic" end-of-line terminator. It happens to be the line
>> terminator for *nix. Windows uses the combined carriage return and
>> line feed characters (ASCII characters 13 and 10) which are
>> represented by \r\n in PHP, while Mac used only the the carriage
>> return.  There is a PHP constant PHP_EOL that I'm pretty sure is
>> supposed to represent the line terminator defined on the operating
>> system of the computer executing the script, but I don't think it is
>> truly "agnostic" either. At least, if you have a text file saved in
>> Windows and split it on a Linux machine based on PHP_EOL, I believe
>> all of your array values will have a carriage return character hanging
>> on the end of them. Am I mistaken?
>>
>> Andrew
> I'm afraid I do disagree with your there:
>
> "When writing a file in text mode, '\n' is transparently translated to
> the native newline sequence used by the system"
>
> This is from the Wikipedia article I found:
> http://en.wikipedia.org/wiki/Newline
>
>
>
> Ash
> www.ashleysheridan.co.uk
>
>

Interesting. I didn't know it behaved differently when writing files.
I just know that when using it as a search pattern or for splitting
text that it is only the newline character. I thought the behavior you
are describing was specifically why PHP added PHP_EOL. Further down
the same article it says:

"Some languages have created special variables, constants and
subroutines to facilitate newlines during program execution. One
example is the PHP constant PHP_EOL, which will produce either '\r\n'
or '\n' appropriate to the operating system the program is executed
on.[3] Though special newline handling facilities can aid execution
during runtime, they do not ensure the validity of newlines for the
source code itself."

I guess since PHP is written in C it picks up the behavior you
describe from the underlying libraries. That's definitely interesting
to keep in mind.

Andrew

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux