From: | "Daniel Verite" <daniel(at)manitou-mail(dot)org> |
---|---|
To: | s400t(at)yahoo(dot)co(dot)jp |
Cc: | pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: Creating 2D arrays for pg_copy_from, reading tab-delimted text file that contains comma and double quotes |
Date: | 2018-12-17 15:35:41 |
Message-ID: | 8ed63cae-4d67-4b3d-9e33-3a212611191f@manitou-mail.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
<s400t(at)yahoo(dot)co(dot)jp> wrote:
> When I save that Excel as a tab delimited text file, I get this:rec_no
> item1 item2 item3 item4 item5
> 1 Denny's orange juice "1,500 yen" """Dear John""" "32""
> TV"(As seen when I opened that file with Notepad)
This looks good. Fields are properly enclosed and double quotes
in contents are doubled, as expected in CSV.
> 5.while (($line = fgetcsv($fileRead, 0, "\t")) !== FALSE) { //0 means I can
> read row whatever its length
> 6. if($row == 1){ $row++; continue; } //skip header
> 7. $line = implode(" ",$line). "\n";
> 8. $twoDarray[] = $line;
> ...
> 14.if (pg_copy_from($con, $tableName, $twoDarray) !== FALSE) {
It goes wrong at line 7. pg_copy_from() expects lines in the
COPY "text format" documented at
https://www.postgresql.org/docs/current/sql-copy.html
It implies that:
- since your call to pg_copy_from() doesn't specify a delimiter
it uses tab, not a space, so implode() must be passed a tab,
not a space.
- if there are backslashes in the contents they must be quoted
by doubling them.
- if there are newline or carriage return characters in the contents
they must be replaced by \n and \r respectively, so as to
not be confused with an end of record.
- if there are tabs in the contents they must be replaced by \t.
These replacements can all be done by a single strtr() call in php.
Best regards,
--
Daniel Vérité
PostgreSQL-powered mailer: http://www.manitou-mail.org
Twitter: @DanielVerite
From | Date | Subject | |
---|---|---|---|
Next Message | Kumar, Virendra | 2018-12-17 15:42:20 | NL Join vs Merge Join - 5 hours vs 2 seconds |
Previous Message | Moreno Andreo | 2018-12-17 15:02:24 | Re: REVOKE to an user that doesn't exist |