Gå til innhold

gange all tall i en fil med et bestemt tall


Anbefalte innlegg

Hei, jeg har en .sub til en film, men den stemmer ikke overens med frame-raten filmen har. For de som ikke vet hvordan en slik sub fil ser ut kommer jeg med et lite utsnitt av en tilfeldig sub fil:

{7096}{7160}No, I think a year|of partying is enough.
{7162}{7199}She'll be going|to Harvard next fall.
{7201}{7242}Mom, I haven't even|gotten in yet.
{7244}{7300}Do you honestly think|Michael Dukakis will provide
{7302}{7352}for this country till|you're ready to squeeze one out?

det første tallet sier på hvilken frame i filmen linjen skal dukke opp, og det neste tallet sier når teksten skal forsvinne (slik jeg tolker det hvertfall). Jeg har kommet frem til at alle tallene i fila må ganges med 1,0645934 for å stemme med filmen. Du tenker kanskje at dette ikke har noe med PHP å gjøre, men jeg tenkte jeg skulle prøve å lage et script som finner alle tall i en fil, ganger dem med et oppgitt tall og lagrer fila.

Hvor starter jeg?

Lenke til kommentar
Videoannonse
Annonse

sånn ville jeg gjort:

 

#legge filnavn.sub inn i array;
$fil = file("filnavn.sub");

#splitte opp hver av arrayene, og legge dem inn i et flerdimensjonalt array:
$tall = 0;
foreach($fil as $value)
{
$fil_2[$tall] = explode("}",$value); 
$tall++;
}

#fjerne {, og printe ut nye verdier:
foreach($fil_2 as  $key => $value)
{
$fil_2[$key][0] = str_replace("{","",$fil_2[$key][0]); 
$fil_2[$key][1] = str_replace("{","",$fil_2[$key][1]);
echo "{".($fil_2[$key][0] * 1.0645)."}{".($fil_2[$key][1] * 1.0645)."}".$fil_2[$key][2]."\n";
}

 

ANER ikke om det funker, men det er ialelfall et prinsip som funker :)

Så om du klarer å fikse så det funker helt selv, så værsågod :p

 

edit:

Litt annerledes:

$fil = file("filnavn.sub");

$tall = 0;
foreach($fil as $value)
{
$fil_2[$tall] = explode("}",$value); 
$fil_2[$tall][0] = str_replace("{","",$fil_2[$tall][0]);
$fil_2[$tall][1] = str_replace("{","",$fil_2[$tall][1]);
echo "{".($fil_2[$tall][0] * 1.0645)."}{".($fil_2[$tall][1] * 1.0645)."}".$fil_2[$tall][2]."\n";
$tall++;
}

Endret av Axentrix
Lenke til kommentar

Tror denne skal funke:

<?php

$fil	=	'sub.txt';

$tall	=	1.0645934;
$sub	=	file($fil);
$pattern	=	"/^\{(\d+)\}\{(\d+)\}(.+)/i";

foreach($sub as $s) {
if(preg_match($pattern, $s, $match)) {
 $line	=	'{' . (floor($match[1] * $tall)) . '}{'. (floor($match[2] * $tall)) . '}' . $match[3];
 echo $line . "<br />\n";
 $match	=	'';
}
}

?>

Var litt usikker på om du vil ha med alle desimalene i tallet ditt, så her er en uten:

<?php

$fil	=	'sub.txt';

$tall	=	1.0645934;
$sub	=	file($fil);
$pattern	=	"/^\{(\d+)\}\{(\d+)\}(.+)/i";

foreach($sub as $s) {
if(preg_match($pattern, $s, $match)) {
 $line	=	'{' . ($match[1] * $tall) . '}{'. ($match[2] * $tall) . '}' . $match[3];
 echo $line . "<br />\n";
 $match	=	'';
}
}

?>

 

EDIT: Denne skal da matche alle linjer på følgende form:

{*tall*}{*tall*}*teksten din*

Endret av PT
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...