Skocz do zawartości

Wadliwa edycja plikow tekstowych


Rekomendowane odpowiedzi

Czesc,

robiac program napotkalem pewien problem ze skryptem edytujacym zawartosc pliku tekstowego. Walcze z tym od wczoraj i jest coraz lepiej, jednal nadal jest pewna granica ktorej nie jestem w stanie przebic. Na poczatku uzytkownik wybiera plik. Wtedy jest tworzony plik tymczasowy "temp". Nastepnie plik temp jest otwierany za pomoca file_text_open_write(nazwa_pliku), zas wybrany przez uzytkownika plik jako plik do odczytu. Z pliku odczytywanego wczytuje string, nastepnie wkleja pojedynczo znaki do pliku temp, chyba ze znak do skopiowania to litera "L" nie poprzedzona zadnym znakiem, albo poprzedzona cudzyslowiem/nawiasem zamykajacym. Plik sie wczytywal, program dzialal, ale zawsze wyjsciowo byl pusty w srodku. Plik byl zapisany do momentu pierwszej zamiany "L" na nowa linie, a w nastepnej lini zawsze bylo kilka znakow spacji i plik sie konczyl. Postanowilem wtedy troche zmienic dzialanie pliku. Nastepnie dodalem zeby plik temp oraz oryginalny byly zamykane(pod koniec operacji) i oryginal zostal usuwany, a zmieniona kopia zmieniala nazwe na oryginalu. Zreszta... macie tutaj kod:

GML
wd_open_dialog_set_filter("Text Files(*.txt)|*.txt|Log files(*.log)|*.log|Error Files(*.err)|*.err|All Files(*.*)|*.*")

wd_open_dialog_show()

global.syfix = wd_open_dialog_get_file()

 

if global.syfix !=""

{

wd_message_set_text("Opened file:

"

+string(global.syfix))

wd_message_show(wd_mk_information,wd_mb_none,wd_mb_ok,wd_mb_none)

 

 

__temporary__ = file_text_open_write("temp")

file_text_close(__temporary__)

__target = file_text_open_write("temp")

__nowlog = file_text_open_read(global.syfix)

current_string=""

previous_string=""

__linia=1

scr_autoline_file()

}

GML
while(!file_text_eof(__nowlog))

{

for(i=1;i<__linia;i+=1)

{

file_text_readln(__nowlog)

}

__string=file_text_read_string(__nowlog)

for(i=1;i<string_length(__string);i+=1)

{

previous_string=current_string

current_string=string_char_at(__string,i)

if current_string="L" && previous_string=""

{

file_text_write_string(__target,"

")

__linia+=1

scr_autoline_file()

exit

}

if current_string="L" && previous_string=")"

{

file_text_write_string(__target,"

")

__linia+=1

scr_autoline_file()

exit

}

if current_string="L" && previous_string='"'

{

__linia+=1

file_text_write_string(__target,"

")

scr_autoline_file()

exit

}

if current_string="L" && previous_string!="" && previous_string!='"' && previous_string!=")"

{

file_text_write_string(__target,current_string)

}

if current_string!="L"

{

file_text_write_string(__target,current_string)

}

}

}

file_text_close(__nowlog)

file_text_close(__target)

file_delete(global.syfix)

file_rename("temp",global.syfix)

 

Te dwa skrypty dzialaja samodzielnie, wiec ich wklejenie do edytora pozwoli Wam zobaczyc jak prorgam funkcjonuje(albo jak mialby, bo sie zawiesza odkad te sztuczke z zamiana dodalem).

 

Edit:

Wydaje mi sie ze to raczej poczatkujace pytanie, ale jak cos mozecie przewalic temat

Odnośnik do komentarza
Udostępnij na innych stronach

Moge najwyzej skrocic Twoj kod, bo aktualnie nie mam GM-a do testow :P

 

Pierwszy skrypt: usun:

GML
__temporary__ = file_text_open_write("temp")

file_text_close(__temporary__)

Te linijki nie sa potrzebne.

Drugi skrypt:

GML

if current_string="L" && previous_string=""

{

file_text_write_string(__target,"

")

__linia+=1

scr_autoline_file()

exit

}

if current_string="L" && previous_string=")"

{

file_text_write_string(__target,"

")

__linia+=1

scr_autoline_file()

exit

}

if current_string="L" && previous_string='"'

{

__linia+=1

file_text_write_string(__target,"

")

scr_autoline_file()

exit

}

if current_string="L" && previous_string!="" && previous_string!='"' && previous_string!=")"

{

file_text_write_string(__target,current_string)

}

if current_string!="L"

{

file_text_write_string(__target,current_string)

}

zamien na:

GML
if current_string="L" && (previous_string='"' || previous_string = ')' || previous_string = ' ')

{

__linia+=1

file_text_write_string(__target,"

")

scr_autoline_file()

exit

}

else file_text_write_string(__target,current_string)

Moze nie pomoglem Ci rozwiazac problemu, ale skrocilem kod, wiec moze zauwazysz, jaki blad popelniles :)

Swoja droga, rekurencja nie jest najlepsza metoda na odczyt plikow.

Odnośnik do komentarza
Udostępnij na innych stronach

chyba ze znak do skopiowania to litera "L" nie poprzedzona zadnym znakiem, albo poprzedzona cudzyslowiem/nawiasem zamykajacym

Tego za bardzo nie rozumiem. Jeżeli jest poprzedzone/nie jest, to co ma się dziać?

Jeżeli mi to wytłumaczysz, to postaram się jakoś pomóc :)

 

E: Każdy znak musi być ładowany po kolei? Czy to nie jest wymagane?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...