Jump to content

StringExplode behavior after upgrading from 3.3.10.2 to 3.3.12.0


Go to solution Solved by Malkey,

Recommended Posts

Hello, have only just upgraded Autoit from 3.3.10.2 to 3.3.12.0 & now my scripts that use _StringExplode on a delimiter = @CRLF insert the delimiter as an element in the array, the script below demonstrates this.

Text file is

1,2
3,4
4,5
6,7
8,9
9,0

The _ArrayDisplay (3.3.12.0) is:

[0] 1,2
[1]
[2] 3,4
[3]
[4] 4,5
[5]
[6] 6,7
[7]
[8] 8,9
[9]
[10] 9,0
[11]
[12]

The _ArrayDisplay (3.3.10.2) is:

[0] 1,2
[1] 3,4
[2] 4,5
[3] 6,7
[4] 8,9
[5] 9,0
[6]

#Include <File.au3>
#Include <Array.au3>
#include <String.au3>
$h = FileOpen("c:\test\stringexplode.txt",$FO_READ)

;stringexplode.txt - below
#cs CRLF at end of eachline
1,2
3,4
4,5
6,7
8,9
9,0

#ce

$sTest = FileRead($h)
FileClose($h)
$aTest = _StringExplode($sTest,@CRLF)
_ArrayDisplay($aTest);The array includes the delimiter as an element, this behavior is different to autoit 3.3.10.2, what am I missing??

I did check "Array UDF - Script Breaking Changes" but didn't find a reference to this.

I have attached the original text file for convenience

Appreciate any insight, thank you

StringExplode.txt

Link to comment
Share on other sites

one or the other, and with a -1 gets rid of the empty

$aTest = _StringExplode($sTest, @LF , -1)

or

$aTest = _StringExplode($sTest,@CR , -1)

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Thanks, I did test your proposal & certainly it did remove the @CRLF as an array element, the only issue I have is that after I use "FileWriteLine" to recreate the original text file(see script below), viewed using Notepad ++ I see additional LF(if delimiter = @CR), this is an issue for my database of text files with CRLF @ the end of each line of text.

Here is my demo script to illustrate the issue:

#Include <File.au3>
#Include <Array.au3>
#include <String.au3>
$h = FileOpen("c:\test\stringexplode.txt",$FO_READ)

;stringexplode.txt - below
#cs CRLF at end of eachline
1,2
3,4
4,5
6,7
8,9
9,0

#ce

$sTest = FileRead($h)
FileClose($h)
$aTest = _StringExplode($sTest,@CR)
_ArrayDisplay($aTest);The array includes the delimiter, this behavior is different to autoit 3.3.10.2, what am I missing??

;Rewrite the file to a new text file
$h = FileOpen("c:\test\stringexplode1.txt",$FO_OVERWRITE+$FO_CREATEPATH)
For $i = 0 to UBound($aTest)-1
    FileWriteLine($h,$aTest[$i])
Next
FileClose($h)
$h = FileOpen("c:\test\stringexplode1.txt",$FO_READ)
$sTest = FileRead($h)
ConsoleWrite("! $sTest" & @CRLF)
ConsoleWrite($sTest & @CRLF);viewed in console window the read file has an empty line between lines with text, in notepad++ u can see an extra LF(view=>Show Symbol=>'Show End Of Line' characters)

Any thoughts?? Thank you

Link to comment
Share on other sites

  • Solution

Looking at the function _StringExplode in String.au3 in the include directory you will see  

Return StringSplit($sString, $sDelimiter, $STR_NOCOUNT)

where $STR_NOCOUNT = 2

Previous versions of AutoIt has

Return StringSplit($sString, $sDelimiter, 3)

where 3 = 1+ 2 =  $STR_ENTIRESPLIT (1) +  $STR_NOCOUNT (2)

My advice is to use StringSplit($sTest, @CRLF, 3) in your script instead of _StringExplode($sTest,@CR)

This appears to be an introduced bug into the  _StringExplode function.

The extra lines are introduced because  each character in the delimiter string in _StringExplode  will mark where to split the string.   And @CRLF is two characters.
 

Link to comment
Share on other sites

  • Moderators

Hi,

Fixed in the next Beta.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Thanks Malkey, your advise worked like a charm, I really appreaciate it....

My advice is to use StringSplit($sTest, @CRLF, 3) in your script instead of _StringExplode($sTest,@CR)

This appears to be an introduced bug into the  _StringExplode function.
 

 

Melba we look forward to the return of _StringExplode less it's aberrant behavior..lol

Hi,

Fixed in the next Beta.

M23

Link to comment
Share on other sites

Sorry about that. Literally have no idea how that happened.

Edit: I introduced the bug back in rev 9497 on 04 January 2014 03:08:00. So my apologies. By the looks of the time it was late!

Edited by guinness

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

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
 Share

×
×
  • Create New...