Jump to content

Regex jautājums


kroko
 Share

Recommended Posts

Ir mazs perl skriptiņš, ko izmantoju, lai izlobītu no OBJ faila nepieciešamo info tālākai apstrādei

No failā atrodošās informācijas man interesē tikai faces dati, t.i., rindas, kas sākas ar "f " un tikai vertex numerācijas dati (cipari pirms visiem frontslashiem rindiņā)

T.i.

No oriģināla:

g STRUCTURAL_-_BEARING_00_MAT01
usemtl _0_MAT01
v 72.592903 100 0
v 72.592903 100 -42.201
#------

vt 0 0.1 0
vt 0.072593 0.1 0
#------

f 4/11 1/3 2/6
f 8/20 5/13 6/14 7/17 
f 4/10 5/13 1/2 
f 3/8 7/16 6/14 4/10

 

ir jāiegūst

4 1 2
8 5 6 7 
4 5 1 
3 7 6 4

 

Pašlaik esmu pie punkta, kur izvadītie dati izskatās

4/11 1/3 2/6
8/20 5/13 6/14 7/17 
4/10 5/13 1/2 
3/8 7/16 6/14 4/10

 

un f-cija ir

sub format {
my $f = shift;
my(@allFaces);
open(ORGOBJDATA, "<${f}") || return -1;
@allFaces = <ORGOBJDATA>; 
close(ORGOBJDATA);
open(CLEANOBJDATA, ">".${f}."_clean.txt") || return -1;
my $facesCount = 0;
foreach my $value (@allFaces) {
	if ($value =~ m/^(f)/i) { # mēs ņemam tikai rindas kas saakas ar "f "
		$value =~ s/f //i; # novācam "f "

		#???????????

		print CLEANOBJDATA $value;
		++$facesCount;
	}
}
close(CLEANOBJDATA);
}

 

Kā lai noņem no palikušās rindas datus, kas sekotu likumam

"iekš $value no pozīcijas, kur atrodas chars "/", līdz (neieskaitot) nākamam whitespace vai newline izdzēst".

 

Paldies jau iepriekš,

Kroko

 

Laikam pašam izdevās

$value =~ s/\/[^\s]*//gi;

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...