DATA Step, Macro, Functions and more

Maximum line length of 255 character

Accepted Solution Solved
Reply
Contributor
Posts: 27
Accepted Solution

Maximum line length of 255 character

Hi,

 

I've edited the code of a File Writer Transformation in SAS DI 4.4. The following line 405 has been added:

 

put 
   "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";

The line is long 826 character and should be inserted in the first row of a .csv file. Infact, it rapresents the header of the columns in the file. After adding this long line in the code block and clicked "OK", the attached message is displayed. If I click "Yes", the job splits the long line in more lines in the file and the first row of the .csv is:

 

IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|CODICE_SETTORECONTABILE
|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|
PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTT
OSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR

How is it possible to write the long line in the first row of the file without the line break when the 255 th carachter is exceeded?

 

Yhank you.

 

 

 

 


maximum line exceeded.png

Accepted Solutions
Solution
‎11-22-2016 04:53 AM
Super User
Posts: 7,771

Re: Maximum line length of 255 character

Did you set lrecl= to a sufficient value in your file statement?

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers

View solution in original post


All Replies
Super Contributor
Posts: 394

Re: Maximum line length of 255 character

In general you can create a very long SAS statement by simply breaking the statement across several lines.

 

 

data _null_;
put "This is a statement that
 starts on one line and ends on the next";
run;

 

Super User
Posts: 7,771

Re: Maximum line length of 255 character

I have always made it a point to avoid program lines in excess of the classical 80 characters. This makes it easy to edit programs on simple telnet/putty connections to the server, avoids mistakes because of misunderstood line breaks, and reduces the scanning movement of your eyes, which is a major factor in tiring you down when programming.

Call it programmer's ergonomy.

If you need to write a long line to a csv, do

put "very long content line part 1"@;
put "very long content line part 2"@;
....
put "very long content line part N"@;
put "end of very long content line";

 

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Posts: 27

Re: Maximum line length of 255 character

Posted in reply to KurtBremser

Hi,

i've tried the both solutions:

 

put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|
CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|
CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|
FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";

 

 

and this:

 

 put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|"@;
				put "CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|"@;
				put "CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|"@;
				put "FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";

 

but they don't print all the characters into a single row: there are more rows and not one row in the file.

Solution
‎11-22-2016 04:53 AM
Super User
Posts: 7,771

Re: Maximum line length of 255 character

Did you set lrecl= to a sufficient value in your file statement?

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Posts: 27

Re: Maximum line length of 255 character

Posted in reply to KurtBremser

Solved setting lrecl=1000 and using the following code:

 

put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|"@;
put "CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|"@;
put "CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|"@;
put "FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";
Respected Advisor
Posts: 4,173

Re: Maximum line length of 255 character

Breaking up the put statement using the @ modifier and a sufficiently big value for lrecl will resolve the issue.

 

May I ask why you are switching the File Writer code to user written in first place? 

Contributor
Posts: 27

Re: Maximum line length of 255 character

[ Edited ]

Hi Patrick,

I've edited the code because the automatically generated code added spaces in the blank fields (ex.: " " instead of ""). The automatically generated code was:

 

file 'C:\...\file.csv' dlm='|';

put quote +(-1) IDENTIFICATIVO_FATTURA +(-1) quote quote +(-1) CONTO_CLIENTE +(-1) quote quote +(-1) CODICE_FATTURA +(-1) quote quote +(-1) DATA_EMISSIONE_FATTURA +(-1) quote ...

And it's been replaced with this:

 

file 'C:\...\file.csv' DSD dlm='|' lrecl=1000;

put IDENTIFICATIVO_FATTURA CONTO_CLIENTE CODICE_FATTURA ...
Respected Advisor
Posts: 4,173

Re: Maximum line length of 255 character

[ Edited ]

This will still write a blank for a missing character variable and a dot for a missing numeric variable.

data _null_;
  set sashelp.class;
  if _n_=2 then call missing(age);
  if _n_=3 then call missing(name);
  file 'C:\temp\file.csv' dlm='|';;
  put 
      name
      age 
      sex 
      ;
run;

Capture.PNG

Contributor
Posts: 27

Re: Maximum line length of 255 character

Try to add the option DSD in the file statement as I've done

Respected Advisor
Posts: 4,173

Re: Maximum line length of 255 character

[ Edited ]

O.K., got it, and I couldn't find an alternative way even with a newer DIS version.

 

Thanks for your time.

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 10 replies
  • 386 views
  • 2 likes
  • 4 in conversation