Jump to content
Valnurat

How do I delete empty cells in a 2D array.

Recommended Posts

Valnurat

I have a

Global $aResult[0][2]

For $i = 0 to UBound($aNames) -1
    Local $aUserInfo = _AD_GetObjectsInOU($aNames[$i],"","","displayName,distinguishedName")
    _ArrayDisplay($aUserInfo)
    _ArrayConcatenate($aResult, $aUserInfo, 1)
    _ArrayDisplay($aResult, 'AD ' & UBound($aResult))
Next

I do receive empty info that's added to my array.

How can I delete empty records?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
water

Loop through the array from the end to the start und use _ArrayDelete to get rid of empty cells. 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
kylomas

Valnurat,

Just for grins...

#include <array.au3>

Local $aArray = [[1, 2, 3], ['', '', ''], [4, 5, 6], [7, 8, 9, 0], ['', '', 'a', 'b'], [''], ['last row first cell']]

_ArrayDisplay($aArray)

For $i = UBound($aArray) - 1 To 0 Step -1
    For $j = 0 To UBound($aArray, 2) - 1
        If $aArray[$i][$j] <> '' Then ExitLoop
    Next
    If $j - 1 = UBound($aArray, 2) - 1 And $aArray[$i][$j - 1] = '' Then _ArrayDelete($aArray, $i)
Next

_ArrayDisplay($aArray)

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
water

Exactly what I suggested above ;) 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
kylomas

@water - Yes, just #@$%# around...nice sunny day here in central US...


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
water

:) 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
iamtheky
#include <array.au3>

Local $aArray = [[1, 2, 3], ['', '', ''], [4, 5, 6], [7, 8, 9, 0], ['', '', 'a', 'b'], [''], ['last row first cell']]

msgbox(0 , '' , stringstripWS(StringRegExpReplace(_ArrayToString($aArray) , "\|\|+" , " ") , 4))

yall don't #@$$$%# around nearly enough

Edited by iamtheky
  • Like 2

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

Share this post


Link to post
Share on other sites
Valnurat
10 hours ago, iamtheky said:
#include <array.au3>

Local $aArray = [[1, 2, 3], ['', '', ''], [4, 5, 6], [7, 8, 9, 0], ['', '', 'a', 'b'], [''], ['last row first cell']]

msgbox(0 , '' , stringstripWS(StringRegExpReplace(_ArrayToString($aArray) , "\|\|+" , " ") , 4))

yall don't #@$$$%# around nearly enough

How do I use this? How do I put this back to an array?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
Jfish

EDIT: just answering the last question without regard to whether or not the output should be a 1D or 2D array.  If you liked the output that @iamtheky created and just want it in an array then this should work it assigns the string to a variable that splits the string back into an array using carriage returns with line feeds as the delimiter. 

#include <array.au3>

Local $aArray = [[1, 2, 3], ['', '', ''], [4, 5, 6], [7, 8, 9, 0], ['', '', 'a', 'b'], [''], ['last row first cell']]
$newArray=StringSplit(stringstripWS(StringRegExpReplace(_ArrayToString($aArray) , "\|\|+" , " ") , 4),@CRLF)
_ArrayDisplay($newArray)

 

Edited by Jfish
  • Like 1

Build your own poker game with AutoIt: pokerlogic.au3 | Learn To Program Using FREE Tools with AutoIt

Share this post


Link to post
Share on other sites
Valnurat

Ok, but this just end up in 1D array. It has to be in a 2D array.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
czardas

I don't understand this request. Are you trying to delete empty rows in a 2D array? Deleting empty cells is impossible without also deleting rows or columns.

Edited by czardas

Share this post


Link to post
Share on other sites
Chimp

also, why don't you check for empty records before the  _ArrayConcatenate() ?


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites
MilesAhead
46 minutes ago, Chimp said:

also, why don't you check for empty records before the  _ArrayConcatenate() ?

That would be cheating.  Too easy. :)

  • Like 1

Share this post


Link to post
Share on other sites
Valnurat
17 hours ago, czardas said:

I don't understand this request. Are you trying to delete empty rows in a 2D array? Deleting empty cells is impossible without also deleting rows or columns.

My mistake. I will ofcourse delete rows. Just my bad words of choice.

 

17 hours ago, Chimp said:

also, why don't you check for empty records before the  _ArrayConcatenate() ?

And if I want to do that. How should I do that? Is there a UDF for this?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
water

Do not use _ArrayConcatenate but loop through $aUserInfo and only write non blank rows to $aResult.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
Valnurat

Ok. I will do that.

Thank you for all your answers.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
Chimp
On 22/3/2017 at 8:12 AM, Valnurat said:

.... And if I want to do that. How should I do that? Is there a UDF for this? ....

I don't know what exactly is returned by the _AD_GetObjectsInOU() function , (emmm... sorry @water :)) , expecially when there is not data returned, anyway if you have only to scan all records to see if are all empty then something like this should do (not tested):

Global $aResult[0][2]
Local $aUserInfo

For $i = 0 To UBound($aNames) - 1
    $aUserInfo = _AD_GetObjectsInOU($aNames[$i], "", "", "displayName,distinguishedName")
    If _IsNotEmpty($aUserInfo) Then ; there is data in the record?
        ; _ArrayDisplay($aUserInfo)
        _ArrayConcatenate($aResult, $aUserInfo, 1)
    EndIf
Next

_ArrayDisplay($aResult, 'AD ' & UBound($aResult))

Func _IsNotEmpty(ByRef $aData)
    ; returns True if record contains data otherwise returns False
    Local $iSum = 0
    For $x = 1 To UBound($aData) - 1
        $iSum += $aData[$x] <> "" ; count not empty fields
    Next
    Return $iSum > 0 ; returns true if record is not empty
EndFunc   ;==>_IsNotEmpty

 


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites
water

Or you could modify the LDAP query so it only returns records where displayname<>""

  • Like 2

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
AdamUL

Here is the _AD_GetObjectsInOU with the proper LDAP query that should get you what you need.  As mentioned by water.  This query only finds user accounts, and not computer accounts. 

$aUserInfo = _AD_GetObjectsInOU($aNames[$i], "(&(objectCategory=Person)(objectclass=user)(displayName=*))", "", "displayName,distinguishedName")

Here is some info on using LDAP Queries.  

 

Adam

 

  • Like 1

Share this post


Link to post
Share on other sites
Valnurat

Ok. I will try a different approach.

$aUserInfo = _AD_GetObjectsInOU("OU=company,DC=ad,DC=company,DC=org", "(&(objectCategory=Person)(objectclass=user)(sAMAccountName=" & $aNames[$i] & "*))", "", "displayName,distinguishedName")

But the result of this ends up with users that I'm not interested in. I would like to avoid where "TransferZone" is exists in distinguishedName.

Is it possble to add an extra filter?


Yours sincerely

Kenneth.

Share this post


Link to post
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

  • Similar Content

    • nooneclose
      By nooneclose
      I want to check some Excel data against data on a website in Chrome. I use Chrome because the site I use does not function properly in Internet Explorer or Firefox. I know how to do the Excel stuff I just can not figure out how to send to Chrome, let alone check to see if the data matches or not. I am also having trouble finding any help online while searching for Chrome functions for Autoit. I have a Chrome UDF installed but I still can not figure out how to get my code to properly function. (I am not posting code because I am  sure my code isn't right, to begin with)
      As usual, any and all help would be greatly appreciated. 
    • ohaya
      By ohaya
      Hi,
      I have a situation where I need to make one request to get a kind of pre-logon page, then click a link on that pre-logon page, which then returns a login form page, and then fill in information in the form page and submit it.
      How can I handle that using AutoIT?
      I can get the AutoIT script to tab to the link, then send an ENTER, which then causes the FORM page to appear in IE.  However, I cannot seem to get the form object from the FORM page (_IEFormGetObjByName fails when it searches for the form).  Why is that, and how can I get the AutoIT to process the FORM page?
      Thanks,
      Jim
    • JuanFelipe
      By JuanFelipe
      Hello friends, I have a simple question, can I have a variable that is not reset, even if my program is closed?
      That is, I want to make a program that can only be opened once, have a variable $ ini = 0, when it is opened for the first and only time it becomes $ ini = 1, so that it can not use the program a second time, as if it was a test software.
      I do not want the variable to depend on a reading of an external file that is easily manipulated. Thank you.
    • nooneclose
      By nooneclose
      My program has to first search for names in Column D that do not match up with column C. I got that search to work using arrays. It was slow and I could not figure out how to delete them so I just manually put coded the names that do not belong. I found their cell location but I do not know how to store that location and delete it.
      This is what I have so far.
      Local $NameToDelete1[6]  = _Excel_RangeFind($OpenWorkbook, "Smith, Bill") _ArrayDisplay($NameToDelete1, "Excel UDF: _Excel_RangeFind Example 1", "", 0, "|", "Sheet|Name|Cell|Value|Formula|Comment") _Excel_RangeDelete($OpenWorkbook.ActiveSheet, $NameToDelete1[2], $xlShiftUp)  
      Please help, I wanted to have this program done yesterday but I did not see this problem until yesterday. 
    • TrashBoat
      By TrashBoat
      So Im trying to make a simple 2d game and make some sort of collision detection so why not to make a 2 dimensional array but i have no clue how  to write it in multiple lines
      Global $map[5,5] = [0,0,0,0,0 _ [0,0,0,0,0 _ [0,0,0,0,0 _ [0,0,0,0,0 _ [0,0,0,0,0] something like this but it doesn't work
×