|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2002
Città: Novara
Messaggi: 1267
|
[HELP] PROLOG, andare a capo con un offset?
Salve a tutti, io e una mia amica avremmo un piccolo problemino...
In pratica dobbiamo consegnare entro il 4 aprile un progetto in prolog che giustifica un file di testo... cosa oscena, anche perchè il prolog a mio parere è un linguaggio orrendo... comunque, procediamo per gradi: quello che stiamo cercando di fare ora è di andare a capo dopo tot caratteri che diamo in input alla funzione (un offset in pratica) la funzione seek (built-in) ci è parecchio utile, ma il problema grosso è che sia usando write che put_code il programma mette sì il carattere giusto nella posizione TOT (con l'invio comunque potrebbe dare problemi), ma SOVRASCRIVE i caratteri successivi!!! e ovviamente questo è da evitare... ma come?? Please siam disperati e siamo solo all'inizio! ecco il codice incriminato che funziona ma sovrasrcive Codice:
acapo(Patha,Pathb,Offset):-open(Patha,read,X),open(Pathb,write,Y), repeat,get_char(X,A),write(Y,A),A==end_of_file,!, close(X), seek(Y,Offset,bof,L),write(Y,'.....'), close(Y). ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jul 2002
Città: Novara
Messaggi: 1267
|
piccolo update! allora, siccome ho scoperto che non si può fare in modo che prolog non sovrascriva tutto sono arrivato a questa conclusione
Quote:
L'unica spiegazione che mi d è questa: quando prolog apre uno stream in write lo resetta.... quindi il nostro povero out.txt diventa bianco........ Allora dovrei usare 2 file di appoggio, ma è una bella palla spiegargli che deve copiarmi solo i primi Offset caratteri in in file temp2!! Help! ![]() Codice:
copiaparziale(Patha,Pathb,Pathc,Offset):-open(Patha,read,X),open(Pathb,write,Y), repeat,get_char(X,A),write(Y,A),A==end_of_file,!, close(Y), open(Pathc,write,Temp), seek(X,Offset,bof,L),repeat,get_char(X,B),write(Temp,B),B==end_of_file,!, close(X), close(Temp). acapo(Patha,Pathb,Pathc,Offset):- copiaparziale(Patha,Pathb,Pathc,Offset), open(Pathc,read,Temp), open(Pathb,write,Y), seek(Y,Offset,bof,L), write(Y,'.....'), repeat, get_char(Temp,C), write(Y,C), C== end_of_file, !, close(Y), close(Temp). |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Premesso che il Prolog lo conosco poco, per fare l'inserimento non basta qualcosa del genere?
Codice:
loop(0,X,Y). loop(Offset,X,Y):-Offset>0,get_char(X,A),(A == end_of_file,!;write(Y,A),M is Offset-1,loop(M,X,Y)). scrivi(X,C):-(C == end_of_file,!;write(X,C),fail). inserisci(Patha,Pathb,Offset):-open(Patha,read,X), open(Pathb,write,Y), loop(Offset, X, Y), write(Y,'.....'), repeat,get_char(X,A),scrivi(Y,A), close(Y), close(X). |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jul 2002
Città: Novara
Messaggi: 1267
|
Quote:
per giustificare un testo devo partire da altre cose, cioè a grandi linee devo fare così: mi danno il limite massimo di caratteri per riga, per cui io seeko fino a tot caratteri, poi torno indietro di uno e controllo se è uno spazio, se no continuo finchè trovo uno spazio e quando lo trovo incremento un contatore fino alla fine (all'inizio del file) poi usando il numero di spazi che ho e il numero massimo di spazi che posso aggiungere calcolo in qualche modo quanti spazi aggiungere ad ogni spazio già presente... non so se mi son spiegato ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:10.