cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > Forum
Yet Another Bulletin Board

Willkommen, Gast. Bitte Einloggen oder Registrieren.
09. August 2020 um 00:56

Übersicht Übersicht Hilfe Hilfe Suche Suche Mitglieder Mitglieder Einloggen Einloggen Registrieren Registrieren
cgicorner.ch « CGI: Regex csv/horizontal+vertikal »


   cgicorner.ch
   Hilfe
   CGI/Perl allgemein

   CGI: Regex csv/horizontal+vertikal
« Vorheriges Thema | Nächstes Thema »
Seiten: 1  Antworten Antworten Bei Antworten benachrichtigen Bei Antworten benachrichtigen Drucken Drucken
   Autor  Thema: CGI: Regex csv/horizontal+vertikal  (Gelesen 2788 mal)
Karl_H.
YaBB Newbie
*



I love YaBB 1G - SP1!

   


Geschlecht: male
Beiträge: 12
CGI: Regex csv/horizontal+vertikal
« am: 31. März 2015 um 00:07 »
Zitieren Zitieren Bearbeiten Bearbeiten

Hallo zusammen
 
Im Zusammenhang mit strukturierten Daten, suche ich
nach folgender Lösung!
 
gegeben: daten.csv
 
 
SECTION;V1;V2;V3
010;value V1;value V2;value V3
020;value V1;value V2;value V3
030;value V1;value V2;value V3
SECTION;V1;V2;V3
010;value V1;value V2;value V3
020;value V1;value V2;value V3
030;value V1;value V2;88888 88
SECTION;V1;V2;V3
010;value V1;value V2;value V3
222;value V1;value V2;value V3
030;value V1;value V2;value V3
 
regex-vertikal:  
document Section[3], v-following[2]
 
Result: 2.Zeile aus Sektion 3, Wert:(222)  
 
regex-horizontal:  
document Section[2], v-following[3]/h-following[4]
 
Result: 4. Spalte aus Sektion 2, Wert: (8888 88)
 
ps: 222 und 8888 88 sind Dummi-Werte!
Split-Chars: (;|,)
 
Angaben zu Links/Tutorials/Referenzen zum Thema
genügen. Bin Anfänger in Perl und Regex.
 
Gruss
 
Karl_H.
gespeichert
cgicorner.ch
YaBB Administrator
*****




Board Admin

   
Homepage E-Mail

Geschlecht: male
Beiträge: 787
Re: CGI: Regex csv/horizontal+vertikal
« Antworten #1 am: 31. März 2015 um 21:04 »
Zitieren Zitieren Bearbeiten Bearbeiten

Hallo Karl_H
 
Ich weiss nicht, ob du hier mit CSV und RegEx glücklich wirst. Das CSV ist mit Sections nicht optimal aufgebaut, zudem musst du die ganze Datei in eine Variable einlesen: je nach Umfang der CSV-Datei nicht gleich lustig. Zudem hast du mit RegEx keine Navigationsmöglichkeiten. XML oder Datenbanken wären da wohl optimaler (XML benötigt bei vielen Daten auch viel Speicher).
 
Trotzdem mal ein Beispiel (SECTION numeriert, also SECTION1, SECTION2, SECTION3 statt nur SECTION):
 
#!/usr/bin/perl
use strict;
my ($csv);
 
# Datei von daten.csv in $csv einlesen
open(INPUT,"daten.csv");
while (<INPUT>) {
 $_ =~ s/[\r\n]+//g;   # \r und/oder \n löschen
 $csv.=$_."\n";  # an Variable anhängen, inkl. Zeilenumbruch
}
close(INPUT);
 
# SECTION3: 2 Zeilen nach unten, erste Spalte
if ($csv =~ m/SECTION3(.*?\n){2}((.*?)[,;\n]){1}/) {
 print $3;
}
 
print "\n";
 
# SECTION2: 3 Zeilen nach unten, 4. Spalte
if ($csv =~ m/SECTION2(.*?\n){3}((.*?)[,;\n]){4}/) {
 print $3;
}

 
ohne Numerierung ist es etwas komplizierter:
 
#!/usr/bin/perl
use strict;
my ($csv);
 
# Datei von daten.csv in $csv einlesen
open(INPUT,"daten.csv");
while (<INPUT>) {
 $_ =~ s/[\r\n]+//g;   # \r und/oder \n löschen
 $csv.=$_."\n";  # an Variable anhängen, inkl. Zeilenumbruch
}
close(INPUT);
 
# SECTION 3: 2 Zeilen nach unten, erste Spalte
if ($csv =~ m/(SECTION[,;](.|\n)*?){3}(.*?\n){2}((.*?)[,;\n]){1}/) {
 print $4;
}
 
print "\n";
 
# SECTION 2: 3 Zeilen nach unten, 4. Spalte
if ($csv =~ m/(SECTION[,;](.|\n)*?){2}(.*?\n){3}((.*?)[,;\n]){4}/) {
 print $4;
}

 
Die Navigationselemente sind immer in den {} (fett), in beiden Beispielen (Beispiel 1: Zeilen nach unten, Felder nach rechts; Beispiel 2: Section Nr., Zeilen nach unten, Felder nach rechts).
 
Hoffe, das hilft dir als Ansatz mal weiter. Wie gesagt ziemlich rechenintensiv, aber grundsätzlich funktionsfähig. Problematisch wird es, wenn die Texte im CSV die Trennzeichen enthalten (auch wenn sauber in ""). Du solltest also ein nie verwendetes Zeichen verwenden, Tab ist sicher besser als , oder ;
 
Gruss
Jürg
gespeichert

cgicorner.ch - Informationen rund um Perl/CGI
Jürg Sommer
Karl_H.
YaBB Newbie
*



I love YaBB 1G - SP1!

   


Geschlecht: male
Beiträge: 12
Re: CGI: Regex csv/horizontal+vertikal
« Antworten #2 am: 04. April 2015 um 14:53 »
Zitieren Zitieren Bearbeiten Bearbeiten

Hallo und Hoi zämä
 
Recht vielen Dank Jürg.
Du hast mir gleich den Volltreffer geliefert.
Für Bemusterungen von Datensätzen/Konvertierungen/Konstellatoren
ist das für mich schon das richtige.
===================================
In xml bin ich auch eher vertraut.
Habe dort auch eine Konvertierung dxf to svg mit xslt und sax realisiert,
womit ich sauberen svg-code (rect=rect, circle=circle, line=line usw.)erhalte.
===================================
Also in cgi/regex, voerst genau nach dem was ich gesucht habe.
 
Dank cgicorner, komme ich nun auch mit regex so langsam in die Gänge
oder bin möglicherweise schon mittendrin ohne es realisiert zu haben.
 
Gruss Karl
gespeichert
Seiten: 1  Antworten Antworten Bei Antworten benachrichtigen Bei Antworten benachrichtigen Drucken Drucken

« Vorheriges Thema | Nächstes Thema »

cgicorner.ch » Powered by YaBB 1 Gold - SP3!
YaBB © 2000-2004. All Rights Reserved.