Inverting Assignment Operations

I found that frequently (particularly when working with dialogs) I was doing a bunch of assignment operations, performing some other operation, then doing the reverse of those same assignment operations. The following is a typical example:
	ClientSheet.m_lClientNo     = m_ClientNo;
	ClientSheet.m_szCompanyName = m_CompanyName;
	ClientSheet.m_szEmail       = m_Email;
	ClientSheet.m_szFirstName   = m_FirstName;
	ClientSheet.m_szLastName    = m_LastName;
	ClientSheet.m_szTitle       = m_Title;

	if (ClientSheet.DoModal()==IDOK) {
		m_ClientNo    = ClientSheet.m_lClientNo;
		m_CompanyName = ClientSheet.m_szCompanyName;
		m_Email       = ClientSheet.m_szEmail;
		m_FirstName   = ClientSheet.m_szFirstName;
		m_LastName    = ClientSheet.m_szLastName;
		m_Title       = ClientSheet.m_szTitle;
	}

Instead of writing the same code twice, I developed this macro to apply to the code. It will act on the current line, or more then one selected lines. If there is no assignment operator in the line, then that line is ignored. The macro treats everything after the first equal sign as the second operand, so if it's applied to something like a=b=c, you'll get b=c=a.

	Sub Invert()
	'DESCRIPTION: Invert an assignment operation
		Dim win
		set win = ActiveWindow
		if win.type <> "Text" Then
			MsgBox "You can only run this macro when a text editor window is active."
		else
			StartLine = ActiveDocument.Selection.TopLine
			EndLine = ActiveDocument.Selection.BottomLine
			If EndLine < StartLine Then
				Temp = StartLine
				StartLine = EndLine
				EndLine = Temp
			End If

			For i = StartLine To EndLine
				TmpBlock = ""

				ActiveDocument.Selection.GoToLine i
				ActiveDocument.Selection.StartOfLine dsFirstText
				ActiveDocument.Selection.EndOfLine dsExtend
				CmtBlock = ActiveDocument.Selection

				Trim(CmtBlock)

				equal = Instr(CmtBlock,"=")
				semi = Instr(CmtBlock, ";")
				If equal <> 0 Then 
					TmpBlock = Left(CmtBlock, equal-1)
					If semi <> 0 then
						CmtBlock = Mid(CmtBlock, equal + 1, semi-equal-1)
					else
						CmtBlock = Right(CmtBlock, Len(CmtBlock) - equal)
					End If

					CmtBlock = Trim(CmtBlock)
					TmpBlock = Trim(TmpBlock)

					if semi <> 0 then
						CmtBlock = CmtBlock + " = " + TmpBlock + ";"
					else
						CmtBlock = CmtBlock + " = " + TmpBlock
					End If
				End If
				ActiveDocument.Selection = CmtBlock
			Next
		End If
	End Sub

Last updated: 2 April 1998



Comments

  • Very nice macro

    Posted by Legacy on 06/08/1999 12:00am

    Originally posted by: Player

    Thanks for a great macro. A real time saver.

    Reply
  • should be using classes

    Posted by Legacy on 10/19/1998 12:00am

    Originally posted by: Mike

    Your macro looks pretty cool... but one blatant thing comes
    
    to mind when looking at it...

    instead of this:
    ClientSheet.m_lClientNo = m_ClientNo;
    ClientSheet.m_szCompanyName = m_CompanyName;
    ClientSheet.m_szEmail = m_Email;
    ClientSheet.m_szFirstName = m_FirstName;
    ClientSheet.m_szLastName = m_LastName;
    ClientSheet.m_szTitle = m_Title;


    why not this:

    class X
    {
    int m_ClientNo;
    CString m_CompanyName;
    CString m_Email;
    CString m_FirstName;
    CString m_LastName;
    CString m_Title;
    }

    class ClientSheet
    {
    X worksaver;
    }

    now in your dialog class:
    class somedlg
    {
    X dlgData;
    }


    now when you use the dlg class...
    somedlg.dlgData = ClientSheet.worksaver;
    if( dlg.DoModal == IDOK )
    {
    ClientSheet.worksaver = dlgData;
    }

    AHHHH much better.... I can breath again....

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • When individual departments procure cloud service for their own use, they usually don't consider the hazardous organization-wide implications. Read this paper to learn best practices for setting up an internal, IT-based cloud brokerage function that service the entire organization. Find out how this approach enables you to retain top-down visibility and control of network security and manage the impact of cloud traffic on your WAN.

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date