Mógłby ktoś napisać funkcję, która usuwałaby wszystkie puste linijki z pliku? Bo wszystkie pomysły, które przychodzą mi do głowy są strasznie nieoptymalne np. wczytanie całego pliku po linijce do tablicy ( nie wczytywanie pustych linii ), a następnie nadpisanie pliku. Ma ktoś może lepszy pomysł?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
[ROZWIĄZANE] Usunięcie pustych linijek
Najlepsza odpowiedź DarkGL, 15.01.2014 00:25
stock usunPusteLinie( filePathName[] ) { if( !file_exists( filePathName ) ){ return ; } new fileNameTmp[ 256 ], counterFile = 0; do { formatex( fileNameTmp ,charsmax( fileNameTmp ), "%sTmp%d" , filePathName , ++counterFile ); } while( file_exists( fileNameTmp ) ) new szLine[128], iLen; for(new i = 0; read_file( filePathName, i, szLine, charsmax( szLine ), iLen ); i++) { trim( szLine ); if ( equali( szLine , "") ) continue; write_file( fileNameTmp , szLine ); } unlink( filePathName ); rename_file( fileNameTmp , filePathName , 1 ); }Nie kompilowałem Przejdź do postu
#1
Napisano 11.01.2014 01:17
https://nalunch.com - A Ty, gdzie pójdziesz dziś na lunch?
#2
Napisano 11.01.2014 02:36
Wczytać plik to chyba i tak musisz, więc nie wiem po co kombinować.
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#3
Napisano 11.01.2014 02:53
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#4
Napisano 13.01.2014 21:13
Czyli tworze nowy plik, wypełniam go niepustymi linijkami, usuwam stary, zmieniam nazwę nowego pliku na stary tak?
Użytkownik SeeK edytował ten post 13.01.2014 21:13
https://nalunch.com - A Ty, gdzie pójdziesz dziś na lunch?
#5
Napisano 14.01.2014 22:26
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#6
Napisano 14.01.2014 23:01
Podaje stock, jakby komuś się miał przydać. Jest z usuwaniem starego pliku, nie testowałem bez.
stock usunPusteLinie(sciezka[]) { new zastepcza[64], licznik = 0 do { formatex(zastepcza,charsmax(zastepcza),"%s%d",sciezka,licznik) ++licznik } while( file_exists(zastepcza) ) new szLine[128], iLen; for(new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { trim(szLine); // pusta linia if (!szLine[0]) continue; write_file(sciezka,szLine,-1) } //Usuwa stary plik unlink(sciezka) //Zmienia nazwe tymczasowego pliku na stary plik rename_file(zastepcza,sciezka,1) }
https://nalunch.com - A Ty, gdzie pójdziesz dziś na lunch?
#7
Napisano 14.01.2014 23:46
W tamtym stocku był błąd. Zamiast write_file(sciezka,szLine,-1) powinno byc write_file(zastepcza,szLine,-1). Ponadto sprawdziłem i jeżeli nie usuniesz starego pliku, to nie zmieni wtedy nazwy nowego pliku na ten stary.
Ten kod już powinien działać prawidłowo.
stock usunPusteLinie(sciezka[]) { new zastepcza[64], licznik = 0 do { formatex(zastepcza,charsmax(zastepcza),"%d",licznik) ++licznik } while( file_exists(zastepcza) ) new szLine[128], iLen; for(new i=0; read_file(sciezka, i, szLine, charsmax(szLine), iLen); i++) { trim(szLine); // pusta linia if (equali(szLine,"")) continue; write_file(zastepcza,szLine,-1) } //Usuwa stary plik unlink(sciezka) //Zmienia nazwe tymczasowego pliku na stary plik rename_file(zastepcza,sciezka,1) }
Użytkownik SeeK edytował ten post 14.01.2014 23:47
https://nalunch.com - A Ty, gdzie pójdziesz dziś na lunch?
#8
Napisano 15.01.2014 00:25 Najlepsza odpowiedź
stock usunPusteLinie( filePathName[] ) { if( !file_exists( filePathName ) ){ return ; } new fileNameTmp[ 256 ], counterFile = 0; do { formatex( fileNameTmp ,charsmax( fileNameTmp ), "%sTmp%d" , filePathName , ++counterFile ); } while( file_exists( fileNameTmp ) ) new szLine[128], iLen; for(new i = 0; read_file( filePathName, i, szLine, charsmax( szLine ), iLen ); i++) { trim( szLine ); if ( equali( szLine , "") ) continue; write_file( fileNameTmp , szLine ); } unlink( filePathName ); rename_file( fileNameTmp , filePathName , 1 ); }Nie kompilowałem
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych