Schrift
[thread]6592[/thread]

Datei durchsuchen und Filtern



<< >> 7 Einträge, 1 Seite
Arasiel
 2004-12-22 11:35
#50289 #50289
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich möchte folgendes machen:
Ich habe ne grosse Datei die u.a. folgende Einträge besitzt:


2004/12/22 09:18:16.784 ----------{ begin
irgendein text
2004/12/22 09:18:16.975 --------------------- end }


Die Datei soll suchen, wo ein "{ begin" steht und alle Zeilen dann rausschreiben (ausser den Leerzeilen), bis ein "end }" auftaucht.
Die Uhrzeit in der Zeile, wo sich das "{ begin" befindet, soll dann von der Zeit abgezogen werden, die in der Zeile mit dem "end }" steht.

Das Ergebnis soll in eine andere Datei geschrieben werden mit folgendem Aufbau:

Zeitdifferenz beträgt: xxx Millisekunden : irgendein text

Wie macht man das am Besten? Ich weiss zwar wie man nach einzelnen Zeilen sucht, aber nicht nach einer Reihe von Zeilen...

Vielen Dank im Voraus!

Gruss,
Markus
Taulmarill
 2004-12-22 12:05
#50290 #50290
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
am besten sucht man wohl nach der "begin" zeile und speichert dann alle nachfolgenden zeilen in einem scalar (text anhängen mit $text .= $zeile) indem man eine whileschleife durchlaufen lässt bis die "end" zeile gefunden ist. diesen scalar kann man dann mit der berechneten zeitdifferenz in eine andere datei schreiben.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
renee
 2004-12-22 12:36
#50291 #50291
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wieso definierst Du Dir nich nen neuen "Blocktrenner":
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /usr/bin/perl

use strict;
use warnings;

my $file = '/path/to/file.txt';
my @entries;

{
local $/ = "---------end}\n";
open(FILE,"<$file") or die $!;
while(my $entry = <FILE>){
push(@entries,$entry);
}
close FILE;
}

foreach my $entry(@entries){
my ($start) = $entry =~ /(.{24})----------{ begin/;
my ($end) = $entry =~ /(.{24})--------------------- end }/;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Arasiel
 2004-12-22 13:49
#50292 #50292
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Ja, aber wenn ichs so mache wie im obigen Codestück angegeben, bekomm ich zwar die Zeilen von begin und end (in den Variablen $start und $end gespeichert), aber die Zeilen die zwischen begin und end werden mir nicht ausgegeben.
Wie kann man diese zusätzlich noch einbauen?
renee
 2004-12-22 14:00
#50293 #50293
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
steht alles in $entry! Mach einfach mal print $entry;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Arasiel
 2004-12-22 14:21
#50294 #50294
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
ich habs probiert. in $entry steht immer ALLES drin
renee
 2004-12-22 14:31
#50295 #50295
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich weiß ja nicht, wie Deine Datei aussieht...

Dann mach mal:
Code: (dl )
1
2
3
4
5
foreach my $entry(@entries){
my ($start) = $entry =~ /(.{24})----------{ begin/;
my ($end) = $entry =~ /(.{24})--------------------- end }/;
my ($middlepart) = $entry =~ /----------{ begin(.*?).{24}--------------------- end }/;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 7 Einträge, 1 Seite



View all threads created 2004-12-22 11:35.