Sostituzione in file txt

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Probabilmente molto tempo fa avevo postato qualcos di simile comunque vado al sodo

ho un file txt composto così


[Round1]
D1=
D2=
TA1=6
TB1=8
GA1=-1
GB1=-1
NT1=
BE1=
TI1=
AT1=
TA2=4
TB2=2
GA2=-1
GB2=-1
NT2=
BE2=
TI2=
AT2=
TA3=3
TB3=1
GA3=-1
GB3=-1
NT3=
BE3=
TI3=
AT3=
TA4=5
TB4=7
GA4=-1
GB4=-1
NT4=
BE4=
TI4=
AT4=
[Round2]

...etc(si ripete)
E difficile da spiegare cosa voglio fare ma ci provo

Allora inanzitutto da uno script recupero il Round che mi interessa ad esempio il [Round2] lo script deve scorrere il file e trovare le righe comprese tra [Round2] e fermarsi prima di [Round3] in quel range deve trovare dove TA e TB corrispondano a due numeri ricavati rpecedentemente ad esempio TA=6 e TB=8 trovato ciò deve modificare le due righe successive cioè GA e GB(che ora sono a -1)e subito dopo modificare anche NT e BE

intuitivamente saprei anche come fare suppongo bisogna aprire il file e sostituire la riga per intero il problema e che non so come dargli l'input dic ercare la riga Roundx e iniziare a far contare da lì(funzione count di cui ignoro completamente tutto) e poi con repalce

qualcuno potrebbe mettermi sulla buona strada?

:book:
 
stringhe baledette!

Beh è un giocetto di stringhe... guarda la documentazione su php.net
Ci sono tante funzioni substr, strstr, str_replace..... che servono al tuo scopo.
Gioca molto sugli a capo \n vista la struttura del txt.
Per l'apertura dei file fopen, fclose son le funzioni da vedere

Ad esempio potresti fare una cosa tipo:

Leggo primo carattere, è '[' ? Se si leggo fino a ']' sulla stessa riga.
La stringa è Round X ? Se si passa alla riga successiva.
Leggi la riga intera, la riga inizia con 'TA' ? Se si prendi il valore dopo '=' altrimenti passa alla riga successiva.
Tutto questo finchè non trovo una riga che inizia con '['
 
Ultima modifica:
Leggo primo carattere, è '[' ? Se si leggo fino a ']' sulla stessa riga.
La stringa è Round X ? Se si passa alla riga successiva.
Leggi la riga intera, la riga inizia con 'TA' ? Se si prendi il valore dopo '=' altrimenti passa alla riga successiva.
Tutto questo finchè non trovo una riga che inizia con '['

non mi sembra una cosa molto facile questa le gfunzioni di ricerca e conteggi le ho usate rarissime volte

magari uno spunto?
 
A me quella sembra proprio la struttura di un file INI. Mai sentito parlare della funzione di PHP parse_ini_file? Ad esempio, se vuoi avere tutti i valori contenuti nella sezione Round2:
PHP:
<?php
$data = parse_ini_file('tuofile', true);
print_r($data['Round2']);
?>
Dai un'occhiata alla documentazione sul manuale ufficiale per maggiori informazioni sul suo funzionamento.
 
Allora

$file = fopen("tuofile.txt", "w+"); //apri il file in lettura e scrittura partendo dal primo car a sinistra
$file_new="";

while(!feof($file)) {
$row= fgets($file);//Questo legge riga x riga
if(strstr($row, "[Round1]"); {
while(!strstr($row,"[")) {//gli dico di fermarsi prima del successivo Round
if(strstr($row,"TA="))
$ta=trim(str_replace("TA=","",$row));//becchi il numeretto
elseif(strstr($row,"TB="))
$tb=trim(str_replace("TB=","",$row));//becchi il numeretto
}
}

}
fclose($file);

Inizia così...
 
ah un particolare prima che inizio a metermici su

la riga dove c'è TA=5 per ogni round c'è TA1=5 e a seguire

TA2 TA3 etc.

Ora ame serve solo rpendere TA e che corrisponda al numero che ho io quindi i vari 123 etc. non mi interessano eiste un carattere universale?

ad esempio farglic ercare
TA?=5 indipendentemente dal valore di ?
 
$file = fopen("tuofile.txt", "w+"); //apri il file in lettura e scrittura partendo dal primo car a sinistra
$file_new="";

while(!feof($file)) {
$row= fgets($file);//Questo legge riga x riga
if(strstr($row, "[Round1]"); {
while(!strstr($row,"[")) {//gli dico di fermarsi prima del successivo Round
if(strstr($row,"TA="))
$ta=trim(str_replace("TA=","",$row));//becchi il numeretto
elseif(strstr($row,"TB="))
$tb=trim(str_replace("TB=","",$row));//becchi il numeretto
}
}

}
fclose($file);

Inizia così...
mi dà una serie di errori di sintassi
prima

syntax error, unexpected ';' alla linea 10
ho tolto il ; dopo l'if
ma continua a darmi errori sulle {

ho tolto la {dal primo if ma mi da errore sul while alla riga 12
 
Ultima modifica:
A me quella sembra proprio la struttura di un file INI. Mai sentito parlare della funzione di PHP parse_ini_file? Ad esempio, se vuoi avere tutti i valori contenuti nella sezione Round2:
PHP:
<?php
$data = parse_ini_file('tuofile', true);
print_r($data['Round2']);
?>
Dai un'occhiata alla documentazione sul manuale ufficiale per maggiori informazioni sul suo funzionamento.

mmmh curiosa sta cosa

allor apecisando che ho fatto un errore anche nella richiesta e mi correggo
devo prima selezionare il round e poi verificare che ta e tb corrispondano a due numeri che invio con un altro script e poi modiificare i GA e GB successivi

ale ho provato il parse ini e credo che potrebbe essere molto più facile lavorare così ma come intervengo sulle righe dell'intervallo round1?
 

Discussioni simili