I am vader Opublikowano 20 Czerwca 2010 Udostępnij Opublikowano 20 Czerwca 2010 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 Więcej opcji udostępniania...
ZyperPL Opublikowano 20 Czerwca 2010 Udostępnij Opublikowano 20 Czerwca 2010 Oj dużo tego... Jeśli nikt Ci nie pomoże. Radzę, zacząć robić od nowa :/ Czasami wystarczy wszystko poukładać i napisać od nowa i działa :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Czerwca 2010 Udostępnij Opublikowano 20 Czerwca 2010 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 Więcej opcji udostępniania...
Gość Opublikowano 22 Czerwca 2010 Udostępnij Opublikowano 22 Czerwca 2010 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 Więcej opcji udostępniania...
I am vader Opublikowano 23 Czerwca 2010 Autor Udostępnij Opublikowano 23 Czerwca 2010 po prostu jeżeli "L" jest 1 znakiem w pliku i zaden go nie poprzedza. Tak, ładowany po kolei, chyba że masz lepszy sposób który nie naruszy pozostałych znaków. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę