Jump to content

Recommended Posts

Posted

Hy,

I wanna to write a file with a single line but put some strings at a certain position let´s say line 1 - position 67. And if it doesnt have the length required add some blank spaces to the final string.

Learn, learn and ... learn

Posted (edited)

You can use _FileWriteToLine to insert a new line.  You could then use FileReadToArray to get the last line and check if it only includes whites whitespace and if not add an @CRLF to the end of the file.

Actually just remembered FileReadToArray won't return white space, so please try this example instead:

#include <File.au3>
Local $sFileName = @ScriptDir & "\Filename.txt"
_FileWriteToLine($sFileName, 3, "Inserted Line 3")
Local $sFileData = FileRead($sFileName)
$sFileData = StringStripWS($sFileData, 2)
Local $hFileName = FileOpen($sFileName, 2)
    FileWrite($sFileName, $sFileData & @CRLF)
FileClose($hFileName)

Filename.txt

Line 1
Line 2
Line 4
Line 5

 

Edited by Subz
Posted

StringLen will allow you to measure a line.  FileReadLine will allow you to read a single line in a multi-line file, as long as each line is separated by a line feed char (or carriage return I believe).  There is no one-stop function I am aware of to do what you want, so you'll have to build some logic to measure the string and insert/append/replace as necessary.

Posted

Here are two methods.

#include <File.au3>
#include <String.au3>

Local $sFileName = @ScriptDir & "\Filename.txt"
If FileExists($sFileName) Then FileDelete($sFileName)
FileWrite($sFileName, "12345678901234567890" & @CRLF & _ ; 78901234567890
        "Line 2 " & @CRLF & _
        "Line 3" & @CRLF & _
        "Line 4")

_FileInsertStringAtPosOnlineNo($sFileName, 1, 10, "Insert Example") ; Reg Exp to get line.
; Or
;_FileInsertStringAtPosOnlineNoA($sFileName, 1, 10, "Insert Example") ; Array to get line.

ShellExecute($sFileName)


Func _FileInsertStringAtPosOnlineNo(ByRef $sFilePath_Name, $iLineNo, $iCharPosInsert, $sInsertText)
    Local $sFileDataLine = StringRegExpReplace(FileRead($sFilePath_Name), "^(?s)(\V*\v*){" & $iLineNo - 1 & "}(\V+).*$", "${2}")
    Local $sNewLine = StringLeft(StringLeft($sFileDataLine, $iCharPosInsert - 1) & _StringRepeat(' ', $iCharPosInsert), $iCharPosInsert - 1) & $sInsertText & StringTrimLeft($sFileDataLine, $iCharPosInsert - 1)
    _FileWriteToLine($sFilePath_Name, $iLineNo, $sNewLine, True)
EndFunc   ;==>_FileInsertStringAtPosOnlineNo


Func _FileInsertStringAtPosOnlineNoA(ByRef $sFilePath_Name, $iLineNo, $iCharPosInsert, $sInsertText)
    Local $arr = FileReadToArray($sFilePath_Name)
    $arr[$iLineNo - 1] = StringLeft(StringLeft($arr[$iLineNo - 1], $iCharPosInsert - 1) & _StringRepeat(' ', $iCharPosInsert), $iCharPosInsert - 1) & $sInsertText & StringTrimLeft($arr[$iLineNo - 1], $iCharPosInsert - 1)
    _FileWriteFromArray($sFilePath_Name, $arr)
EndFunc   ;==>_FileInsertStringAtPosOnlineNoA

 

  • 2 weeks later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...