Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Occasional Contributor Ina
Occasional Contributor
Beiträge: 6
INFILE: txt-Datei einlesen unter UNIX

Guten Tag,

 

Die Datei enthält mehrere rows, es wir aber nur die erste Zeile eingelesen. Woran kann es liegen?

ich habe es mit INFILE XXXX TRUNCOVER probiert.

 

 

Super User
Beiträge: 7.431
Betreff: INFILE: txt-Datei einlesen unter UNIX
[ Bearbeitet ]

Von welcher Plattform stammt die Datei (Windows, UNIX, sonstwas)?

Wie kommt die Datei vom Ursprung zum SAS-Server?

 

Irgendwo da passiert wahrscheinlich was.

 

Unter Windows solltest Du die Datei mit sowas wie notepad++ öffnen und dann auf Hexadezimal-Darstellung schalten; damit sieht man dann, wie die Zeilenenden kodiert sind.

 

Edit: SAS läuft unter UNIX, also ist das schon mal geklärt. Bleibt die Frage, wie die Datei zum UNIX-Server kommt, und von wo sie ursprünglich stammt. Im Notfall einen Exzerpt in ein zip-Archiv stellen und das hier anhängen.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor Ina
Occasional Contributor
Beiträge: 6
Betreff: INFILE: txt-Datei einlesen unter UNIX

Die Datei liegt auch auf UNIX.

wie sie zum Unix-Server kommt, weiß ich leider nicht. Ursprünglich war es eine txt-Datei.

 

mit INFILE XXX lrecl=106 recfm=f

habe ich es geschafft, dass auch andere Zeilen gelesen, aber mit fehlerhaften Einträgen.

Ich vermute, es liegt daran, dass

die Datei so aussieht:

a b c d

        a b c d

              a b c d

 

 

 

Super User
Beiträge: 7.431
Betreff: INFILE: txt-Datei einlesen unter UNIX

Wenn das so gestaffelt aussieht, dann ist höchstwahrscheinlich recfm=f korrekt, aber die lrecl zu kurz.

Einfach den Verschub von einer Zeile zur nächsten auszählen und das Ergebnis zur lrecl addieren.

 

Trotzdem ist es wichtig, die Struktur der Datei zu kennen. Auf Linux gibts das Tool hexdump zum Anzeigen einer Datei in Hexadezimal-Darstellung.

hexdump -C dateiname | head

zeigt einem die ersten 160 Zeichen. Falls mehr gebraucht wird, einfach (zB) -20 an das head anhängen.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Beiträge: 24
Betreff: INFILE: txt-Datei einlesen unter UNIX

Hallo,

 

beim Infile-statement  option termstr = verwenden.

Es gibt die Optionen CRLF für Windows Zeilenenende mit x0D0A, CR für Mac Zeilenende mit x0D und LF für Unix-Zeilenende mit  x0A

 

Ansonsten hat die Datei eventuell keinen Zeilenumbruch und der Versatz kommt nur aus dem automatischen Umbruch deines Editors. Schon mal die Fenstergröße geändert?

 

Viele Grüße

Jan

Occasional Contributor Ina
Occasional Contributor
Beiträge: 6
Betreff: INFILE: txt-Datei einlesen unter UNIX

mit der Option termstr=lf klappt es leider nicht

Super User
Beiträge: 7.431
Betreff: INFILE: txt-Datei einlesen unter UNIX

Ina schrieb:

mit der Option termstr=lf klappt es leider nicht


Das sieht mir auch sehr nach einer FB-Datei vom Großrechner aus. Oder nach etwas, das genauso erstellt wurde.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor Ina
Occasional Contributor
Beiträge: 6
Betreff: INFILE: txt-Datei einlesen unter UNIX

Mit auszählen des Abstandes für lrecl hat es geklappt! Vielen Dank!