Denver Posted May 30, 2009 Share Posted May 30, 2009 Hi. Last morning, I wanted to create a file from an array (using the "_FileWriteFormArray" function), and updating the line I wanted. So, I found the "_FileWriteToLine" function, that wasn't exactly I needed. Fixed : -> _FileWriteToLine adds one more blank line when call for the last line of the file (My script is based on the number lines in a file..) -> impossible to write a (single) blank first line -> a "FileWrite()" is called for each line of the text file (Very slow.) -> Bad use of "" / @CRLF to create (or set) a single blank line -> (minor) "$i" is not set as Local scope -> (minor) lot of "Ubound"s called, without change of their value expandcollapse popupFunc _FileWriteToLine2 ($sFile, $iLine, $sText, $fOverWrite = 0) If $iLine <= 0 Then Return SetError (4, 0, 0) If Not IsString ($sText) Then Return SetError (6, 0, 0) If $fOverWrite <> 0 And $fOverWrite <> 1 Then Return SetError (5, 0, 0) If Not FileExists ($sFile) Then Return SetError (2, 0, 0) Local $filtxt = FileRead ($sFile, FileGetSize ($sFile)) $filtxt = StringSplit ($filtxt, @CRLF, 1) If UBound ($filtxt, 1) < $iLine Then Return SetError (1, 0, 0) Local $fil = FileOpen ($sFile, 2), $i, $limit = UBound ($filtxt) - 1, $file2write = "" If $fil = -1 Then Return SetError (3, 0, 0) For $i = 1 To $limit If $i = $iLine Then If $fOverWrite = 1 Then If $sText <> "" Then If $i < $limit And $sText <> @CRLF Then $file2write &= $sText & @CRLF ElseIf $i = $limit Or $sText = @CRLF Then $file2write &= $sText EndIf Else If $i < $limit Then $file2write &= $sText EndIf EndIf EndIf If $fOverWrite = 0 Then If $i < $limit Then If $sText = @CRLF Then $file2write &= @CRLF & $filtxt[$i] & @CRLF Else $file2write &= $sText & @CRLF & $filtxt[$i] & @CRLF EndIf ElseIf $i = $limit Then If $sText = @CRLF Then $file2write &= @CRLF & $filtxt[$i] Else $file2write &= $sText & @CRLF & $filtxt[$i] EndIf EndIf EndIf ElseIf $i < $limit Then $file2write &= $filtxt[$i] & @CRLF ElseIf $i = $limit Then $file2write &= $filtxt[$i] EndIf Next FileWrite ($fil, $file2write) FileClose ($fil) Return 1 EndFunc ;==>_FileWriteToLine2 For my own purpose, I changed some stuff : (changes not shown in the code above) -> if the file is not found, it creates it without prompt (can be dangerous, I know) -> if the line to write is > number of lines in the file to write, then it adds enough blanks lines (idem) -> overwrite is not called only when its value equals 0. (instead of a difference between the $fOverWrite's values {"1", "0", "else"}, I use values {"0", "else"}.) Talking about the future of the function : -> Is all-in-one call of $filtxt a good idea ? (Directly slip the lines of the file, instead of reading it before (two -> one operation)) -> Change the "SetError(Var,0,0)" into "SetError(var)" ? Thanks reading, I hope I did'nt bypass something important ? D. Link to comment Share on other sites More sharing options...
James Posted June 2, 2009 Share Posted June 2, 2009 Wow, this is much faster than the original. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now