PDA

View Full Version : Anzahl Sätze bei CPYFRMSTMF



Seiten : [1] 2

Liebhoff
29-11-07, 12:41
Ich möchte die Anzahl der zu kopierenden Sätze beim CPYFRMSTMF begrenzen, sprich ich will aus der im IFS liegenden Datei nur eine bestimmte Anzahl (z.B. 1000 statt 4 Millionen) in eine AS/400 Datei kopieren.

Hat jemand eine Idee, wie ich das bewerkstelligen kann, leider gibt es keinen Parameter für die Anzahl der zu kopierenden Sätze.

Gruß Thomas

Fuerchau
29-11-07, 12:44
Das geht dann leider nur per Programm mit den IFS-Funktionen und eigener Konvertierung (ASCII->EBCDIC).

Oder in 2 Schritten:
1. CPYFRMSTMF in Zwischendatei
2. CPYF mit Begrenzung Satzanzahl

Liebhoff
29-11-07, 12:52
Das Kopieren in eine Zwischendatei erfolgt bereits, nur brauche ich auch dort nur 1000 Sätze. Ich will einfach verhindern, das die PC Datei im IFS mit 350 MB Größe nochmal vollständig kopiert wird. Das belastet erstens die Festplatte und zweitens dauert es eine ganze Weile bis das Kopieren erledigt ist.

Bislang bleibt wohl nur die Lösung die Ausgangsdatei im IFS zu verkleinern. Was aber auch nicht einfacher ist wenn alles automatisch laufen soll.

Gruß Thomas

Fuerchau
29-11-07, 13:08
Da hilft mal wieder die gute alte Qshell:


head - Copy the first part of files

Synopsis
head [-n count] [file ...]

Description

The head utility displays the first count lines of each of the specified files, or of standard input if no files
are specified. If -n is not specified, then the first 10 lines of the file are displayed.
If more than one file is specified, each file is preceded by a header consisting of the string ″==> XXX <==″

where XXX is the name of the file.

Options
-n Display count number of lines.

Beispiel:

qsh cmd('cd /Home/mydir;head -n1000 myfile >my1000file')

Liebhoff
29-11-07, 14:25
Wir kommen der Sache näher, am Prompt funktioniert das einwandfrei.

Nun will ich das aber im CL machen und sage daher:

CHGVAR VAR(&BEFEHL) VALUE('CD /Datenaustausch/IMPCSV; +
HEAD -n1000 ' *CAT &PCFILE *CAT ' >part1000.dat')

QSH CMD(&BEFEHL)

Das Joblog zeigt dann:

Befehl wurde normal mit Ausführungsstatus 1 beendet.
Die Variable Befehl enthielt tatsächlich :

CD /Datenaustausch/IMPCSV; HEAD -n1000 AArbnaf0.dat >part1000.dat

Nur die Datei part1000.dat wurde nicht erzeugt.

Was läuft falsch ?

Gruß Thomas

Liebhoff
29-11-07, 14:39
Hab es selber gefunden.

man muss das CD klein schreiben.

Wieder was gelernt.

Thomas

holgerscherer
29-11-07, 21:18
man muss das CD klein schreiben.


mein Lieblingsthema, wenn es um unixoide Probleme geht: wer kam bloss auf die verrückte Idee, bei Dateinamen (und somit auch Befehlen) zwischen GrossKlein zu unterscheiden? :)

-h

Fuerchau
29-11-07, 22:00
Tja, können ja ncht alle Windoof heißen (zur Zeit der DOS-Box kannte man das nicht und das ist so übernommen).
Und Unix ist ja viel älter !

Nicht umsonst gabs den Spruch:

Tunix mit Unix !

holgerscherer
29-11-07, 22:06
Tunix mit Unix !

Der hat was ;-) Ich glaube, die GROSSklein-Unterscheidung kommt aus Zeiten, als ein ständiger Aufruf von lowercase() die CPU gebraten hätte...

-h

BenderD
30-11-07, 07:28
jedenfalls war das ein Mensch, der was von der Art des Menschen zu lesen verstand, Kleinbuchstaben lesen sich schneller und mixed case schafft die Trenner, die das Auge braucht. Windoof ist allenfalls nach außen mixed case zuzulassen und intern alles als das selbe anzunehmen, da kann man nämlich dann Hugo nicht in hugo umbenennen, wer schon mal einen cvs Server auf Windows hatte, kennt das Problem, oder wird es kennenlernen.

D*B

PS: DOS und OS/400 mit seinen 8 bzw. 10 Buchstaben stammelnden Namen ist für mich keineswegs Beispielhaft, da war Unix früher schon weiter.


Tja, können ja ncht alle Windoof heißen (zur Zeit der DOS-Box kannte man das nicht und das ist so übernommen).
Und Unix ist ja viel älter !

Nicht umsonst gabs den Spruch:

Tunix mit Unix !