Four Js Development Tools Forum

Discussions by product => Genero BDL => Topic started by: Jose Edvandro M. on October 17, 2023, 01:55:46 pm



Title: LOAD
Post by: Jose Edvandro M. on October 17, 2023, 01:55:46 pm
I have a csv file, I'm trying to import it with the LOAD command. However, this file has a header. How do I import the file without importing the first line, which is the header?


Title: Re: LOAD
Post by: Reuben B. on October 19, 2023, 12:38:37 am
With the LOAD we match the Informix-4gl LOAD statement which I don't believe has the ability to skip first row.  Having said I don't see what stops us adding syntax to ...

Code
  1. LOAD FROM filename [ DELIMITER delimiter]
  2. {
  3.   INSERT INTO table-specification [ ( column [,...]) ]
  4. |
  5.   insert-string
  6. }

... and adding a keyword similar to ...

Code
  1. LOAD FROM filename [ DELIMITER delimiter] [SKIP line]
  2. {
  3.   INSERT INTO table-specification [ ( column [,...]) ]
  4. |
  5.   insert-string
  6. }  

as that would not break compatibility.

However that does not help you now. Your current options might include ...

using tail to remove the first line, something like

Code
  1. tail -n + 2 filename > filename2
  2.  

or also suggested here https://stackoverflow.com/questions/28478657/informix-load-from-file-with-header load into a temp table which is all chars and then delete or ignore the first row before loading to destination table.


or you can explore writing your own generic library function using base.Channel, base.SqlHandle, base.StringTokenizer

Something like this as a starting point, need to add error handling, cater for case where delimiter is at end etc.

Code
  1. CALL generic_load("filename.unl", "INSERT INTO test_table VALUES(?,?)", "|", TRUE)
  2. ...
  3.  
  4. FUNCTION generic_load(filename STRING, sql STRING, delimiter STRING, omit_firstrow BOOLEAN)
  5.  
  6. DEFINE ch base.Channel
  7. DEFINE hdl base.SqlHandle
  8. DEFINE col_idx INTEGER
  9. DEFINE line STRING
  10. DEFINE tok base.StringTokenizer
  11.  
  12.    LET ch = base.Channel.create()
  13.    CALL ch.openFile(filename,"r")
  14.  
  15.    LET hdl = base.SqlHandle.create()
  16.    CALL hdl.prepare(sql)
  17.    BEGIN WORK
  18.    CALL hdl.open()
  19.  
  20.    IF omit_firstrow THEN
  21.        LET line = ch.readLine()
  22.    END IF
  23.    WHILE TRUE
  24.        LET line = ch.readLine()
  25.        IF ch.isEof() THEN
  26.            EXIT WHILE
  27.        END IF
  28.        LET tok = base.StringTokenizer.createExt(line, delimiter, "\\", TRUE)
  29.        LET col_idx = 0
  30.        WHILE tok.hasMoreTokens()
  31.            LET col_idx = col_idx + 1
  32.            CALL hdl.setParameter(col_idx, tok.nextToken())
  33.        END WHILE
  34.        CALL hdl.put()
  35.    END WHILE
  36.    CALL hdl.close()
  37.    COMMIT WORK
  38.  
  39.    CALL ch.close()
  40. END FUNCTION

(it would be nice if there was a method that combined ch.read and hdl.setParameter to avoid use of tokenizer (tokenizer doesn't have CSV as a delimiter ...)


Hope that helps,

Reuben








Title: Re: LOAD
Post by: Michelle B. on January 15, 2024, 10:41:38 am
I have a csv file, I'm trying to import it with the LOAD command. However, this file has asmash karts (https://smashkartsio.com)header. How do I import the file without importing the first line, which is the header?
If you are trying to import a CSV file with a header using the LOAD command, you can use the IGNORE keyword to skip the first line of the file. Here’s an example:

LOAD DATA INFILE 'filename.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

The IGNORE 1 ROWS statement tells MySQL to skip the first row of the file, which is the header. This will allow you to import the data from the CSV file without including the header row.


Title: Re: LOAD
Post by: Clifton E. on February 15, 2024, 09:39:35 am
If you are trying to import a CSV file with a header using the LOAD command, you can use the IGNORE keyword to skip the first line of the file. Here’s an example:
basket random (https://basketrandom.io)
LOAD DATA INFILE 'filename.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

The IGNORE 1 ROWS statement tells MySQL to skip the first row of the file, which is the header. This will allow you to import the data from the CSV file without including the header row.
Many thanks for that solution.

Regard,
Clifton Evans


Title: Re: LOAD
Post by: Jose Edvandro M. on February 21, 2024, 05:04:14 pm
I have a csv file, I'm trying to import it with the LOAD command. However, this file has asmash karts (https://smashkartsio.com)header. How do I import the file without importing the first line, which is the header?
If you are trying to import a CSV file with a header using the LOAD command, you can use the IGNORE keyword to skip the first line of the file. Here’s an example:

LOAD DATA INFILE 'filename.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

The IGNORE 1 ROWS statement tells MySQL to skip the first row of the file, which is the header. This will allow you to import the data from the CSV file without including the header row.

LOAD DATA INFILE works only for mysql.
We work with postgresql, sql server, informix and oracle