Re: Importing an ASCII file

Поиск
Список
Период
Сортировка
От Vijay Deval
Тема Re: Importing an ASCII file
Дата
Msg-id 3B9AF8E3.6AF56EBF@giaspn01.vsnl.net.in
обсуждение исходный текст
Ответ на Importing an ASCII file  (Francisco Reyes <lists@natserv.com>)
Список 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 по дате отправления:

Предыдущее
От: Andrew McMillan
Дата:
Сообщение: Re: pl/pgsql function problem
Следующее
От: Francisco Reyes
Дата:
Сообщение: Re: Importing an ASCII file