Jump to content

Clip to Array?


Ctwizzy
 Share

Recommended Posts

Im trying to put the clipboard contents into an array

I was originally copying the clipboard to a file and then doing filetoarray, but I now want to skip this step and go from cliptoarray.

This is what im tring to do

#include <file.au3>
Dim $aRecords = ClipGet()

Dim $pinfile = "newpins.txt"
$file = FileOpen($pinfile, 1)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

For $x = 1 to $aRecords[0]
If StringInStr($aRecords[$x], "mystring") Then
        $val = $aRecords[$x]
        FileWrite($file, $val)
    EndIf
Next
FileClose($file)

This wont work tho as $aRecords is no longer an array, so how can I make it an array instead of a really long string?

Link to comment
Share on other sites

  • 3 years later...

Hi

I am trying to do a similar thing but I have multi lines and multi columns on the clipboard.

Seperation of Lines = CRLF

Seperation of Columns = Tab (had to use spaces to clarify here)

Example:

12345{Tab}JOB ONE{Tab}6{Tab}Customer Services

12346{Tab}JOB TWO{Tab}3{Tab}Service

12347{Tab}JOB THREE{Tab}1{Tab}Service

Any assistance would be grately appreciated.

Rgds

M

Edited by MadMaxx
Link to comment
Share on other sites

Try these slightly varying methods.

#include <array.au3> ; For test purposes only (_ArrayDisplay)

;#cs ; ====== Comment out if text already on clip board ========
Local $sClip = "Code" & @TAB & "Title" & @TAB & "Frequency" & @TAB & "Dept" & @CRLF & _
        "12345" & @TAB & "JOB ONE" & @TAB & "6" & @TAB & "Customer Services" & @CRLF & _
        "12346" & @TAB & "JOB TWO" & @TAB & "3" & @TAB & "Service" & @CRLF & _
        "12347" & @TAB & "JOB THREE" & @TAB & "1" & @TAB & "Service"
ClipPut($sClip)
;#ce ; =========================================================

Local $sStr = ClipGet()
Local $a1DArray, $NumOfLines, $cols, $c = 0

$a1DArray = StringSplit(StringStripCR($sStr), @TAB & @LF, 2)
; or
;$a1DArray = StringRegExp($sStr, "(.+?)(?:\s{2,}|\t|$)", 3) ; Will also split on 2 or more spaces

StringReplace($sStr, @LF, @LF)
$NumOfLines = @extended + 1 ; Plus one to include last line (which has as no @LF)

$cols = UBound($a1DArray) / ($NumOfLines)

Local $aRet2D[$NumOfLines][$cols]
For $i = 0 To $NumOfLines - 1
    For $j = 0 To $cols - 1
        $aRet2D[$i][$j] = $a1DArray[$c]
        $c += 1
    Next
Next

ConsoleWrite(ClipGet() & @CRLF)
_ArrayDisplay($aRet2D, "New Array")


; or


$arr = _StringTo2DArray(ClipGet())
_ArrayDisplay($arr, "From _FileReadTo2DArray")


Func _StringTo2DArray($sStr)
    Local $c = 0
    $sStr = StringStripWS($sStr, 2)
    $aTmp = StringSplit($sStr, @LF)
    ;Local $aLines = StringSplit(StringStripCR($sFileContent), @TAB & @LF)
    Local $aLines = StringRegExp($sStr, "(.+?)(?:\s{2,}|\t|$)", 3)

    Local $iCol = (UBound($aLines)) / $aTmp[0]
    Local $arr[$aTmp[0]][$iCol]
    For $i = 0 To UBound($aLines) - $iCol Step $iCol
        For $x = 0 To UBound($arr, 2) - 1
            $arr[($i / $iCol)][$x] = $aLines[$c]
            $c += 1
        Next
    Next
    Return $arr
EndFunc ;==>_StringTo2DArray
Link to comment
Share on other sites

Thanks Malkey.

I used the Function one at the end after trying all of them. Forgot to mention that I am a total Newbee to this kinda thing. I am a recent convert from AutoHotKey which I was just getting to grips with when my boss decided we should be using AutoIt instead.

Thanks again for the help.

M

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

  • Recently Browsing   0 members

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