"Syntax" Markieren Sie eine Flatfile

1314
hova

Ich habe gegoogelt und gesucht und erkundet, aber es scheint, als würden die meisten Editoren konfigurierbare Syntax-Hervorhebungsdefinitionen auf Schlüsselwörtern und dergleichen basieren. Ich brauche eines, das auf Spalten und Zeilen basiert, im Grunde etwas, um verschiedene Felder in einer flachen Datei hervorzuheben.

Es muss komplizierter sein als eine Zeile für alle. Es gibt jedoch verschiedene "Zeilenarten".

Ein Beispiel ist unten gezeigt

A9999000055555 333333 55554444422222210102009000000333333 B44444555550000 B44444555550000 B44444555550000 B44444555550000 C9999 0004 

Mit Ausnahme von "0004" (Anzahl von B-Datensätzen) und "10102009" (Datum) wären alle anderen fortlaufenden Zahlen tatsächliche Alpha-Zahlen, die verschiedene Benutzereingabefelder darstellen. Der erste Buchstabe wird normalerweise als Linientyp bezeichnet.

Der Zweck dieser Frage ist es, den Menschen die Überprüfung der "Korrektheit" des Dateiformats zu ermöglichen. Normalerweise werden diese Dateien normalerweise auf automatisierte Weise erstellt, aber die Geschäftsregeln ändern sich und alte Mainframe-Programme müssen aktualisiert werden (und was am Ende passiert, ist nicht schön). Die Idee ist also, denjenigen, die diese Dateien erstellen, die Möglichkeit zu geben, sich selbst zu überprüfen, ob die Datei dem Format entspricht. Ich beabsichtige hier nicht, irgendeine Geschäftsregel zu überprüfen, sondern nur das Format.

5
Können Sie ein Muster der flachen Datei posten, damit wir die Struktur sehen können? Setzen Sie mehrere Zeilen, wenn einige von den vorherigen abhängig sind. Snark vor 14 Jahren 1
An welcher Plattform arbeitest du gerne? Muss es eine Windows-Lösung sein? Normalerweise neige ich für diese Art von Dingen zu sed / awk / vim, weil es das ist, was sie wirklich gut können, da alle Computerdaten wie Ihre flache Datei aussehen. Noch eine Frage: Wozu dient das Bearbeiten einer solchen Datei? Bringst du es irgendwo hin, wie in eine Datenbank oder steckst es in etwas Altes, wie eine Mainframe-Anwendung? atroon vor 14 Jahren 0
Das Format selbst ist seit Jahren ein Standard und wird nicht so schnell verschwinden, da viele Kunden noch Mainframes besitzen. Aus diesem Grund habe ich gehofft, Kunden (und mir) eine "einfache" Möglichkeit zu bieten, das Format der Datei anzuzeigen und zu überprüfen, bevor sie sie senden. Windows wäre die bevorzugte Plattform. hova vor 14 Jahren 0

9 Antworten auf die Frage

3
Bruce Martin

Auf dem RecordEditor RecordEditor könnte es sich nicht um einen Texteditor handeln (er zeigt die Daten in einer Tabelle an). Es hat auch Einzelanzeige + andere Ansichten zur Verfügung.

Standardmäßig wird das Datensatzlayout ausgewählt. Es gibt jedoch ein "bevorzugtes Layout", in dem jeder Datensatz mit dem korrekten Layout für den Datensatz angezeigt wird.

Damit können Sie die Datei visuell prüfen

Mit dem RecordEditor können Sie die Datei in einer Tabelle anzeigen (mit der bevorzugten Option)

RecordEditor table display

Sie können auch in einer hervorgehobenen Textansicht anzeigen ( Ansicht >>>> Textansicht (Hervorhebungsfelder) ).

Text Editor View with highlighted fields

Sie können auch mischen, hier wird der aktuelle Datensatz auch im Tabellenformat auf der rechten Seite angezeigt:

Text Editor View with highlighted fields and Single-Record View


Alternativ verfügt der RecordEditor über eine Makrooption . Du könntest

  1. Verwenden Sie die integrierten Makros ViewForEachRecordType.js oder HeaderDetailFooterTabs.js (in einigen Versionen nicht vorhanden), um jeden Datensatztyp auf einer separaten Registerkarte anzuzeigen
  2. Schreiben Sie Ihre eigene (möglicherweise angepasst von ViewForEachRecordType.js )

laufen ViewForEachRecordType.js

Running Macro

Dadurch wird für jeden Datensatztyp in der Datei ein separater Tab erstellt:

Output From ViewForEachRecordType.js


Eine andere Möglichkeit könnte der Textplorer sein, ich habe es selbst nicht ausprobiert, aber es sieht so aus, als würde es Felder hervorheben

1
alfplayer

Sie können ein Skript schreiben, um HTML-Tags für die Farbgebung hinzuzufügen. sed (arbeitet an Linien) und awk (Arbeiten an Säulen) könnten hilfreich sein, besonders bei Linux. Oder ein Perl-Skript. Sie können reguläre Ausdrücke verwenden, um einen Musterabgleich durchzuführen.

Sie müssen außerdem den minimalen HTML-Code hinzufügen, um ihn in eine HTML-Datei (Header- und Body-Tags) zu konvertieren.

Es ist nicht beabsichtigt, HTML zu erstellen, sondern Richtlinien zur Bearbeitung der eigentlichen Dateien anzugeben. hova vor 14 Jahren 0
Bearbeiten in was? Vim (Regex), Notizblock2 (primitive Parser), ...? Rook vor 14 Jahren 0
@Idigas Bearbeitung in ALLES, das (möglicherweise) in der Lage ist, das Vorstehende auszuführen und es auch zu speichern (ohne Markup-Markierung). Nur ein einfacher Texteditor. hova vor 14 Jahren 0
1
Amanda

Vim! Beginnen Sie mit den Anweisungen zum Ändern der Syntaxhervorhebung, und machen Sie sich von dort aus auf den Weg. Ich denke, Sie sagen:

  • Wenn eine Zeile mit "A" beginnt, wird sie aus 12 Zeichen bestehen. ein Leerzeichen; sechs Zeichen; einige Räume; viele Zeichen
  • Wenn eine Zeile mit "B" beginnt, hat sie eine Folge von 14 Zeichen.
  • Wenn eine Zeile mit "C" beginnt, hat sie 4 Zeichen. einige Räume; 4 Zeichen

So können Sie Ihre Hervorhebungsregeln auf der Grundlage dieser Anforderungen definitiv definieren.

Ich werde einen Monat brauchen, um die Learning Cliff von VIM zu überwinden, und das fängt gerade erst an, nicht einmal mit dem Hervorheben hova vor 14 Jahren 1
Okay, du magst Vim nicht. Aber es würde in dieser Situation funktionieren. Amanda vor 14 Jahren 0
1
atroon

Ich fragte nach der beabsichtigten Verwendung eines solchen Dienstprogramms und basierend auf ein paar Schlüsselwörtern ("Anzeigen und Überprüfen vor dem Senden"), die Sie im Wesentlichen wie folgt ausführen möchten:

  1. Stellen Sie sicher, dass die Datei im Standardformat mit der richtigen Anzahl von Spalten (und möglicherweise Zeilen) ist.
  2. Geben Sie einige Statistiken wie die Gesamtzahl der Datensätze, die Gesamtzahl der verkauften Artikel, den in der Datei dargestellten Datumsbereich usw. usw. an.
  3. Speichern Sie die Datei entweder auf einem zentralen Server oder in einem Wartebereich, um sie später hochzuladen.

Der richtige Weg, dies zu erreichen, ist meiner Meinung nach (vor allem, weil, wie Sie sagen, viele Kunden noch Mainframes haben und immer noch Daten in solchen Formaten erhalten), ein benutzerdefiniertes Frontend, um die Informationen über die Daten an Sie zu bringen Kunde.

Der Weg das zu tun? Sie haben im Wesentlichen zwei Optionen: Entweder a) Schreiben Sie einen Dateiparser selbst in Java, C # oder C ++ (Shudder), um eine Vorschau der in den Dateien enthaltenen Daten zu erhalten. Oder b) ein Mitglied oder einen kürzlich Absolventen (prüfen Sie zuerst ein Portfolio!) Von Computerprogrammierklassen, um einen Parser für Sie zu codieren. Oder der Neffe des Chefs oder der nerdige Freund Ihrer Schwester usw. Ich weiß nicht, welche Erfahrung oder welches Interesse Sie an so etwas haben, noch etwas über Ihren Hintergrund. Vergib mir bitte, wenn ich unangemessene Annahmen mache. Wie bei so vielen anderen Dingen in der Welt der Technologie können Sie zwei von schnell, günstig und gut haben.

Die niedrigsten Kosten und die schnellste Möglichkeit der bisher vorgestellten, die die mir bekannten technischen Möglichkeiten abdecken, sind das Aufbeißen, das Erlernen einiger vim(verwenden Sie GVim für Windows) und das Verwenden von Syntax-Hervorhebungsfiltern. Zweitens wäre es eine Reihe von Skripten in etwas wie sedoder zu erstellen awk.

Da die Eingabe für Ihr Problem im Wesentlichen ein in Abständen (Zeilenumbrüche) abgeschnittener Textstrom ist, muss die Verarbeitung der Daten auf dieselbe Weise mit der Eingabe umgehen, und nur sehr wenige Programme tun dies jetzt, weil, wie Sie sagen, dies sind Daten, die von einem alten Mainframe-Programm erzeugt werden.

Excel kann auch beim Importieren von Nutzen sein, aber alle Zeilen müssen auf dieselbe Weise formatiert werden, so dass das immer noch nicht das tut, was Sie möchten. Eine weitere Sache, die mir einfällt, ist, dass Sie möglicherweise mithilfe von Access eine solche Datei analysieren und VBA verwenden können, um Datensatzzählungen zu erstellen und Statistiken zu erstellen. Dies ist jedoch in Bezug auf die Hervorhebung von Hervorhebungen weniger einfach. Wenn Sie COBOL-Entwickler kennen, wäre dies ein großartiges 1-2-Nacht-Projekt für einen von ihnen. Es könnte sogar ein Open Source-Projekt auf sourceforge.net werden, um Daten aus den Fängen des Mainframes zu befreien!

# 1 Der wichtigste Teil davon ist die Absicht, sicherzustellen, dass die Datei das Format erfüllt und Fehler leicht zu erkennen sind. # 2 ist nicht so genau, da die Gesamtzahl der Datensätze und dergleichen Teil der Datei selbst sind und nicht berechnet, sondern nur hervorgehoben werden müssen. Nr. 3 ist weit über das hinaus, was ich wollte, aber es ist eher das, was mit der Datei über die eigenen Mittel des Kunden geschieht (normalerweise automatisiert). Ich hatte gehofft, dass ich nicht selbst eine Lösung in C # programmieren müsste, aber ich wundere mich, dass es angesichts der Zeit und Dauer von flachen Dateien nicht so etwas gibt. hova vor 14 Jahren 0
Ah, aber das überrascht nicht ... es ist die menschliche Natur. "Diese Daten stammen aus dem Computer und sind daher korrekt", ist eine überraschend vorherrschende Einstellung. Auch "Wenn mit dieser Datei etwas nicht stimmt, werden sie im HQ fangen". Mein Mitgefühl. atroon vor 14 Jahren 0
1
njd

Ich denke, Sie werden wahrscheinlich keine Lösung finden, die keine Programmierung erfordert.

Jeder Texteditor mit Funktionen zur Syntaxhervorhebung, die komplexer als das einfache Keyword-Matching sind, ist zwangsläufig komplizierter, wie in Vim und Emacs.

Für Vim können Sie eine Hervorhebungsdatei wie folgt definieren:

syntax clear A B C  syntax match A /^A\%(\a\|\d\)\ \d\ \\S\+$/ syntax match B /^B\%(\a\|\d\)\$/ syntax match C /^C\%(\a\|\d\)\ \\d\$/  highlight A guifg=darkgreen highlight B guifg=darkblue highlight C guifg=royalblue 

und lade es mit :source myhighlight.vim

Die Zeilen werden dann hervorgehoben, wenn sie korrekt sind, oder bleiben unmarkiert, wenn sie nicht mit dem regulären Ausdruck übereinstimmen.

Es wird komplizierter, wenn Sie bestimmte Felder in diesen Zeilen hervorheben möchten.

Ich persönlich würde nach Möglichkeiten suchen, ein Skript aus dem Editor aufzurufen, das alle Überprüfungen für mich erledigen könnte. Auf diese Weise können Sie einen beliebigen Editor verwenden und müssen nicht dazu gezwungen werden, einen Editor mit der gewünschten Hervorhebungsflexibilität zu verwenden.

0
mpeterson

Wenn ich kein Frontend für die Datei programmieren würde, würde ich wahrscheinlich Notepad ++ verwenden, da es eine Möglichkeit gibt, Ihre eigene Sprache zu definieren, einschließlich der Hervorhebung.

Download / Hauptseite

Alles über die benutzerdefinierte Sprachsektion

Ein weiteres Beispiel / Walkthru

Hoffentlich helfen diese Ihnen beim Einstieg.

Ja, ich habe das schon durchgemacht, es ist nutzlos, da es auf Schlüsselwörtern basiert. Ich habe keine Keywords, nur Positionen und ein paar identifizierende Buchstaben. hova vor 14 Jahren 1
Ah .. In diesem Fall kann Ihre beste Wette entweder durch die VIM-Lösung oder einfach durch Erstellen einer benutzerdefinierten Front-End-Benutzeroberfläche für diese Datei erstellt werden. mpeterson vor 14 Jahren 0
0
GAThrawn

Es sieht so aus, als wären Ihre Spalten durch Leerzeichen begrenzt.

Haben Sie versucht, sie einfach in Excel zu importieren und dann die Hervorhebungen / Farben auf die Spalten anzuwenden?

Wenn das nicht der Fall ist, dann, wie andere sagen, sind Sie wahrscheinlich beim Programmieren. Sie könnten wahrscheinlich ein relativ einfaches Perl oder VBScript schreiben, das diese Textdatei verwendet und eine mit Syntax hervorgehobene HTML-Datei oder ähnliches ausgibt, indem Sie Regexen verwenden, die den von Ihnen gesuchten Mustern entsprechen.

0
AdamV

Sie könnten so etwas wie Monarch versuchen

Dies ist ein alter Beitrag, aber erwägen Sie, die Antwort zu erweitern. Das bloße Zeigen auf ein Produkt wird von den derzeitigen Standards nicht als Antwort betrachtet, da es nichts darüber aussagt, warum es eine gute Lösung ist oder wie die Lösung zu erreichen ist. Gute Hinweise zur Empfehlung von Software [hier] (http://meta.superuser.com/questions/5329/how-do-i-recommend-software-in-my-answers). Vielen Dank. fixer1234 vor 8 Jahren 1
0
Parimal Dharane

I had a similar requirement and I found the solution using one of the samples given in ":sytanx help" screens.

Below is the sample flat file with 2 records of same type. Here record header is "01" which is the first column. After header record there are 4 columns with fixed lenghts given below:

+-----+-----+-----+-----+-----------------+ | No. | Beg | End | Size| Description | +-----+-----+-----+-----+-----------------+ | 1| 1| 2| 2|HEADER | | 2| 3| 7| 5|Column 2 | | 2| 8| 11| 4|Column 3 | | 2| 12| 15| 4|Column 4 | | 2| 16| 17| 2|Column 5 | +-----------------------------------------+ 

Sample records:

01AAAAABBBBCCCCDD 01PPPPPQQQQRRRRSS " Syntax definition and highlighting for Record 01 :sy region rec1 matchgroup=rec1 start="^01" end="$" contains=r1col1,r1col2,r1col3,r1col4 keepend :hi rec1 ctermbg=red guibg=red " Syntax definition and highlighting for next 4 columns from Record 01 :sy region r1col1 matchgroup=r1col1 start="\%3v" end="\%8v" contained :sy region r1col2 matchgroup=r1col2 start="\%8v" end="\%12v" contained :sy region r1col3 matchgroup=r1col3 start="\%12v" end="\%16v" contained :sy region r1col4 matchgroup=r1col4 start="\%16v" end="\%18v" contained " Highlighted alternate columns with same color :hi r1col1 ctermbg=green ctermfg=black :hi r1col2 ctermbg=green guibg=green :hi r1col3 ctermbg=darkblue ctermfg=white :hi r1col4 ctermbg=green ctermfg=black 

This way we can define "regions" for more records (say Record starts with "02") with different number and widths of columns which may present in the same flatfile but will get highlighted based on the record header.

Auf welche Software beziehen Sie sich hier in Ihrer Antwort? slm vor 11 Jahren 1