Re: Importing an ASCII file - Mailing list pgsql-novice

From Vijay Deval
Subject Re: Importing an ASCII file
Date
Msg-id 3B9AF8E3.6AF56EBF@giaspn01.vsnl.net.in
Whole thread Raw
In response to Importing an ASCII file  (Francisco Reyes <lists@natserv.com>)
List pgsql-novice
A simple 'c' script might do the job of converting a fixed field length
text file to a format suitable for Postgres. Some days back I had
submitted a script that puts a field separator at at predefined
locations. The script did not remove trailing blanks. It did not put "'"
before and after the text fields. I have tested the following script on
one file and found it to work. The file has 5 fields, 4,45,40,40,40
long. first is numeric, others are text.  "|" could be replaced by ","
if that is more convenient. If this is found suitable, it could be
developed into a script where the information could be passed to the
program as  parameters.
It would be possible do develop it further so that the program
identifies whether the field is character or neumeric. But "DATE" field
could pose a problem. If experienced users feel that conditions (field
length equal to 8 and first character as 1 or 2 ) would be sufficient
conditions, then it should be possible to modify the script to identify
field types.

-------------------------------------------------------------------------

#include <stdio.h>

#define FNM 5     /* number of fields */
#define F1 4
main()
{
int c,i,len,count,flg;
int flen[FNM];
int nmchr[FNM];
 flen[0]=4;
 flen[1]=45;    /*length of second field */
 flen[2]=40;    /* length of third field */
 flen[3]=40;
 flen[4]=40;

 nmchr[0]=0; /* 0 for numbers */
 nmchr[1]=1; /* 1 for char field */
 nmchr[2]=1;
 nmchr[3]=1;
 nmchr[4]=1;
 flg=0;
count=0;
i=0;
 len=F1;
 c=getchar();
 while (c != EOF){
   if( (nmchr[i]==1)&&(count==0))
     printf("'");
   if(flg<2)    /* when flg==2 it has already printed one blank */
     putchar(c);
   else
       ;    /* do not print anything, that is remove blanks*/
     count=count+1;
     c=getchar();
     if (c==' ')
       flg=flg+1;
     else
       flg=0;

     if (count==len){
       if(nmchr[i]==1)
         printf("'|");
       else
         printf("|");
         i=i+1;
         len=len+flen[i];
         if (nmchr[i]==1)
           printf("'");
     }
     if(c=='\n'){
       if (nmchr[i]==1)
         printf("'");
       count=0;
       i=0;
       len=F1;
       putchar(c);
       c=getchar();
     }
 }
}

----------------------------------------------------------------

Vijay

pgsql-novice by date:

Previous
From: Andrew McMillan
Date:
Subject: Re: pl/pgsql function problem
Next
From: Francisco Reyes
Date:
Subject: Re: Importing an ASCII file