Forum: PC-Programmierung PageBreak in Text File


von Martin (Gast)


Lesenswert?

Ist es moeglich einen PageBreak in eine Text file einzubauen??

ich habe schon eine weile gesucht und nichts gefunden. ausser einem 
linebreak mittels /r/n oder misterieosen befehlen wie print #9, chr(12) 
oder einem angeblichen ascii 12 befehl habe ich nichts gefunden. ich 
muesste es mittels einer Batch in eine txt file pipen....

hat einer von euch schon mal was von dem printerbefehl \u000C gehoert??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das "angebliche ascii 12" ist dasselbe wie der "Printerbefehl" - das ist 
ein Form-Feed.
Er wird von einigen Textterminals und eben Druckern ausgewertet, aber in 
Textdateien ist er nicht üblich.

Es gibt keine standardisierte Codierung für Seitenumbruch in reinen 
Textdateien; manche Textanzeiger oder Editoren mögen FormFeed auswerten, 
aber üblich ist das nicht.

von Martin (Gast)


Lesenswert?

wie kriege ich dann etwas in mein txt file rein (per batch file / pipe) 
damit ich am ende beim drucken seitenumbrueche habe?

danke im voraus!

von yalu (Gast)


Lesenswert?

Texteditoren arbeiten normalerweise nicht seitenorientiert, deswegen
wird der Form-Feed (= chr(12) = ASCII 12 = \u000C = Strg-L = Ctrl-L =
^L = '\x0c' = '0014" = '\f') dort nicht ausgewertet, sondern
allenfalls als ^L angezeigt.

Man findet diesen Code manchmal in älterem Quellcode bspw. vor jedem
Unterprogramm. Damit wird erreicht, dass jedes Unterprogramm auf einer
neuen Seite ausgedruckt wird. In vielen Programmiersprachen wird ^L
als Leerraum (White Space, wie Leerzeichen, Zeilenvorschub und
Tabulator) behandelt (bspw. in C und Python), so dass es keinen
Einfluss auf die Funktionsweise des Programms selber hat.

Textverarbeitungsprogramme, die im Gegensatz zu reinen Texteditoren
seitenorientiert arbeiten, ersetzen i.Allg. einen Form-Feed in einer
importierten Textdatei durch einen Seitenumbruch (so z.B. Open
Office).

Wie der Form-Feed in eine Textdatei eingefügt wird, hängt vom
verwendeten Editor ab. Bei Vim geht das mit Strg-V Strg-L, bei Nano
mit Esc V Strg-L. Wie das in deinem Editor geht, wenn überhaupt, sagt
dir sicher die zugehörige Gebrauchsanleitung.

von Rufus Τ. F. (rufus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Nun, wenn Dein Drucker FormFeeds unterstützt, dann musst Du in der Tat 
FormFeeds ausgeben.
Ein FormFeed ist Ctrl+L; eine Textdatei, die nur FormFeed enthält, 
erhältst Du durch Eingabe von

  copy con ff.txt [RETURN]
  [Ctrl+L][Ctrl+Z]

Das Ergebnis einer solchen Aktion siehst Du im Anhang.

von Karl H. (kbuchegg)


Lesenswert?

Martin wrote:
> wie kriege ich dann etwas in mein txt file rein (per batch file / pipe)
> damit ich am ende beim drucken seitenumbrueche habe?
>
> danke im voraus!

Du kannst dir zb. eine Datei vorbereiten in der nur dieses
eine Zeichen drinnen ist. Dieses File wird dann zwischendurch
auf den Drucker ausgegeben um den FormFeed zu erreichen.
Wie du das File erstellst:
  * Texteditor. Unter DOS gabs immer die Möglichkeit mittels
    AltGr und dem Zeichencode an der Zehnertastatur ein beliebiges
    Zeichen einzugeben. Wenn das mit deinem Texteditor noch geht:
    Bingo

  * Wenn du mit dem Texteditor nicht weiter kommst:
    Text File anlegen mit 1 Zeichen drinn, zb. A
    Dann besorgst du dir einen Hex Editor, machst das File
    auf und tauscht das A gegen einen FormFeed aus

von Martin (Gast)


Lesenswert?

krass, cool danke. das hoert sich echt nicht schlecht an. ich werde das 
mal ausprobieren :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Eingabemethode mit der Alt-Taste und dem Zehnerblock existiert auch 
unter Windows noch (Alt, nicht AltGr!). Zwischen ANSI (CP1252) und "DOS" 
CP437/850 wird durch voranstellen einer 0 unterschieden:


Beispiel:
Alt + 148   ö ("DOS")
Alt + 0148  ø (ANSI)

Bei Zeichencodes kleiner als 128 ist eine solche Unterscheidung 
natürlich nicht nötig.

Zeichencodes kleiner als 32 können auch mit Ctrl + einer Buchstabentaste 
eingegeben werden, vom ASCII-Code des Großbuchstabens wird (dezimal) 64 
abgezogen.

Ctrl + A ist demnach dasselbe wie Alt + 1

Jedoch werten diverse Editoren solche Steuerzeichen auch selber aus und 
tragen diese nicht in die zu erzeugende Textdatei ein.

Hundertprozentige Sicherheit gewährt hier nur ein Hexeditor.

Wie man aber den Steuercode für FormFeed (0x0C) in eine Datei bekommt, 
habe ich bereits weiter oben beschrieben und auch eine ein solches 
Zeichen enthaltene Datei angehängt.

So etwas hat natürlich nur mit Primitivdruckern einen Sinn, die unter 
Umgehung des betriebssystemeigenen Druckertreibers DIREKT angesteuert 
werden, so, wie man es mit Nadelratzen und ähnlichem in der vorderen 
Altsteinzeit mal tat.

von Martin (Gast)


Lesenswert?

Nochmal danke fuer die hilfe, hat uebrigens wunderbar geklappt.

ich musste nur die ff.txt etwas erweitern, denn entweder wollte winword 
die seitenumbrueche nicht richtig fressen oder meine zuweisung und pipe 
haben das eine 0c hex zeichen nicht erkannt.

so habe ich ein weiteres 0c sowie ein a0 (fuer leerzeichen) eingefuegt, 
damit folgendes funktioniert:


set /P umbruch=<c:\temp\ff.txt
for /f "tokens=1,*" %%g in (text.txt) do (echo %%g %%h >> NEU.txt
IF %%g==keyword (echo %umbruch% >> NEU.txt)


jetzt haette ich noch zwei andere kurze fragen:

1. beim umleiten (echo >>) des textes aus text.txt in NEU.txt 
zerschiesst es mir die tabulator formatierung. gibt es eine methode in 
batch dies zu verhindern??


2. will ich beim umleiten einen abschnitten ins nirvana umleiten, kriege 
es aber irgendwie nicht gebacken das in meine forschleife einzubasteln. 
springt batch denn wirklich immer zurueck in die laufende forschleife, 
wenn sie noch nicht abgearbeitet ist? koennte ich also ein call zu einer 
unterprozedur machen und dieser sagen: OK jetzt beginnt ein teil den du 
weiter auslesen sollst, aber nicht in die NEU.txt reinschreiben sollst? 
um dann wieder zurueckzuspringen, wenn ein neues abschnitt beginnt der 
in die datei rein soll?

gruss
martin

von Spess53 (Gast)


Lesenswert?

Hi

Wenn meine Dos-Kenntnisse nicht ganz verblichen sind: Um etwas ins 
Nirwana zu schicken gibt es ein Nulldevice. Wird, so weit ich mich noch 
mit '>>nil' angesprochen.

MfG Spess

von Spess53 (Gast)


Lesenswert?

Da fehlt ein 'erinnern kann'.

MfG Spess

von Martin (Gast)


Lesenswert?

das umleiten ist ja nicht das problem :)

das geht mit

echo %%g > nul


mein problem ist ja, in der for schleife die meine text.txt ausliest 
(parst) einen gewissen abschnitten (markiert mit einem keywort) 
rauszuschneiden, aber dann bei einem zweiten keywort, wieder zurueck zum 
eigentlichen auslesen zurueckzukehren....

von Matt (Gast)


Lesenswert?

Sorry, batch-Programmierung ist seeehr lange her

irgendwie so ähnlich?

DATEI="blafasel.txt"

for ... do (
    if %%g==keyword1 (DATEI="nul")
    if %%g==keyword2 (DATEI="blafasel.txt")
    echo %%g >> $DATEI
)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.