Loc Posted July 28, 2020 Author Share Posted July 28, 2020 I just want to save the data on listview to the txt file. It aligns columns and rows as on the listview to print out for easy reading by customers Link to comment Share on other sites More sharing options...
Musashi Posted July 28, 2020 Share Posted July 28, 2020 (edited) 56 minutes ago, Loc said: save to txt file mainly to print Local $aValues = [[3,0,0], ["Bread", 2, 3], ["Butter", 2.2, 3.3], ["Pineapple", 2, 3.34]] _Billplease() Sleep(1000) ShellExecute("Notepad.exe", "/p " & @ScriptDir & "\Billplease.txt", "", "", @SW_HIDE ) Func _Billplease() Local $filename = @ScriptDir & '\Billplease.txt' Local $hF = FileOpen($filename, 2) FileWriteLine($hF, @MDAY & "." & @MON & "." & @YEAR) FileWriteLine($hF, "") FileWriteLine($hF, "Product | Amount | Money ") FileWriteLine($hF, "") For $i = 1 To $aValues[0][0] FileWriteLine($hF, StringFormat ("%-12s %8.2f %9.2f", $aValues[$i][0], $aValues[$i][1], $aValues[$i][2])) Next FileWriteLine($hF, "") FileWriteLine($hF, "see you later!") FileClose ($hF) EndFunc ;==>_Billplease EDIT : @Loc : As @Nine has already described in the other thread, you should use a mono spaced font. Otherwise, the elements are not printed aligned. Edited July 28, 2020 by Musashi "In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move." Link to comment Share on other sites More sharing options...
Musashi Posted July 28, 2020 Share Posted July 28, 2020 @Melba23 or @JLogan3o13 : Could you be so kind and move the thread https://www.autoitscript.com/forum/topic/203477-is-there-a-way-to-save-data-on-listview-to-a-txt-file-but-the-text-is-still-complete-i-did-but-failed/ over here. It is a bit confusing to answer the same questions in two threads . "In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move." Link to comment Share on other sites More sharing options...
Dan_555 Posted July 28, 2020 Share Posted July 28, 2020 (edited) Here is a bit modified code (_Billplease function) , with adaptable width of the Product names: expandcollapse popup#include <Array.au3> #include <GUIConstantsEx.au3> #include <GuiComboBox.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> #include <String.au3> $hGUI = GUICreate("Sell", 320, 350, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP)) $Input = GUICtrlCreateCombo("", 8, 5, 130, 21, $CBS_DROPDOWNLIST) GUICtrlSetData($Input, "Cake|Cooking oilasdasd|Street|Salt|Egg", "Cake") $Input2 = GUICtrlCreateCombo("", 8, 55, 130, 21, $CBS_DROPDOWNLIST) For $i = 10 To 100 Step 10 GUICtrlSetData($Input2, $i, "10") Next $Button_Add = GUICtrlCreateButton("Add", 200, 6, 75, 30) $Button_Del = GUICtrlCreateButton("Delete", 200, 36, 75, 30) $Button_Save = GUICtrlCreateButton("Save", 10, 320, 75, 25) $Button_Load = GUICtrlCreateButton("Load", 90, 320, 75, 25) $Button_Bill = GUICtrlCreateButton("Bill please", 200, 320, 75, 25) $Combo = GUICtrlCreateCombo("", 8, 30, 130, 21, $CBS_DROPDOWNLIST) For $i = 1 To 30 GUICtrlSetData($Combo, $i, 1) Next $List = GUICtrlCreateListView("Product|Amount|Money", 8, 90, 300, 230, _ BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_AUTOARRANGE, $LVS_NOSORTHEADER, $WS_VSCROLL), _ BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) GUISetState(@SW_SHOW) Global $aValues[1][4] $aValues[0][0] = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button_Add Add() Case $Button_Del ;_GUICtrlListView_DeleteItemsSelected($List) ; do not use this. Local $x For $x = $aValues[0][0] To 0 Step -1 If _GUICtrlListView_GetItemSelected($List, $x) Then ;~ CW($x & " selected") _ArrayDelete($aValues, $x + 1) $aValues[0][0] = $aValues[0][0] - 1 _GUICtrlListView_DeleteItem($List, $x) EndIf Next Case $Button_Save Save() Case $Button_Load Load() Case $Button_Bill _Billplease() EndSwitch WEnd Func _Billplease() Local $filename = @ScriptDir & '\Billplease.txt' Local $hF = FileOpen($filename, 2) Local $w = 0, $wn = 0 Local $tmp = "" For $i = 1 To $aValues[0][0] $w = StringLen($aValues[$i][0]) If $w > $wn Then $wn = $w Next $w = $wn If $w > 10 Then $w = $w - 10 $tmp = _StringRepeat(" ", $w) Else $wn=10 EndIf FileWriteLine($hF, @MDAY & "." & @MON & "." & @YEAR) FileWriteLine($hF, "") FileWriteLine($hF, "Product " & $tmp & "| Amount | Money ") FileWriteLine($hF, "") For $i = 1 To $aValues[0][0] FileWriteLine($hF, StringFormat("%-" & $wn & "s %10.0f %12.2f", $aValues[$i][0], $aValues[$i][1], $aValues[$i][2])) Next FileWriteLine($hF, "") FileWriteLine($hF, "see you later!") FileClose($hF) EndFunc ;==>_Billplease Func Add() Local $vr, $am, $ValueCount $value = GUICtrlRead($Input) $value2 = GUICtrlRead($Input2) $am = GUICtrlRead($Combo) $vr = _ArraySearch($aValues, $value, 1) ;This adds the name to $aValues[$vr][0] If StringStripWS($value, 8) <> "" Then If $vr = -1 Then $ValueCount = $aValues[0][0] + 1 _ArrayAdd($aValues, $value) $aValues[$ValueCount][3] = GUICtrlCreateListViewItem($value & "|" & $am & "|" & $value2, $List) ; Save this for later. $aValues[$ValueCount][1] = $am $aValues[$ValueCount][2] = $value2 $aValues[0][0] = $ValueCount Else $aValues[$vr][1] = $aValues[$vr][1] + $am $aValues[$vr][2] = $aValues[$vr][2] + $value2 _GUICtrlListView_BeginUpdate($List) _GUICtrlListView_SetItemText($List, $vr - 1, $aValues[$vr][1], 1) _GUICtrlListView_SetItemText($List, $vr - 1, $aValues[$vr][2], 2) _GUICtrlListView_EndUpdate($List) EndIf EndIf EndFunc ;==>Add Func Save() Local $filename = @ScriptDir & '\item.txt' Local $hF = FileOpen($filename, 2) For $i = 1 To $aValues[0][0] FileWriteLine($hF, $aValues[$i][0] & '|' & $aValues[$i][1] & '|' & $aValues[$i][2]) Next FileClose($hF) EndFunc ;==>Save Func Load() Local $sp = 0 _GUICtrlListView_DeleteAllItems($List) $aValues = "" Global $aValues[1][4] $aValues[0][0] = 0 $file_read = FileReadToArray(@ScriptDir & '\item.txt') $Read_line = UBound($file_read) For $i = 0 To $Read_line - 1 $sp = StringSplit($file_read[$i], "|") If IsArray($sp) And UBound($sp) = 4 Then _ArrayAdd($aValues, $sp[1]) $aValues[0][0] = $aValues[0][0] + 1 $aValues[$i + 1][1] = $sp[2] $aValues[$i + 1][2] = $sp[3] $aValues[$i + 1][3] = GUICtrlCreateListViewItem($file_read[$i], $List) EndIf Next EndFunc ;==>Load You have to use a different font (like @Nine mentioned) Change the font to "Consolas","Courier" or "Courier New", then the text will be displayed and printed just right: Edited February 13, 2021 by Dan_555 deleted the attached picture Some of my script sourcecode Link to comment Share on other sites More sharing options...
Loc Posted July 28, 2020 Author Share Posted July 28, 2020 How can I get the right amount of money without having to float 10.00. sorry I'm not smart Link to comment Share on other sites More sharing options...
Musashi Posted July 28, 2020 Share Posted July 28, 2020 (edited) 2 hours ago, Loc said: How can I get the right amount of money without having to float 10.00 Do you mean ; Product | Amount | Money Cake 1 10 Salt 3 20.99 instead of : Product | Amount | Money Cake 1 10.00 Salt 3 20.99 EDIT : @Loc Simple example : _FormatValue("10") _FormatValue("10.00") _FormatValue("10.09") _FormatValue("10.11") _FormatValue("10.2") Func _FormatValue($sValue) ConsoleWrite(" -------------------------------------- " & @CRLF) ConsoleWrite(" ===> Value = " & $sValue & @CRLF) If StringRegExp($sValue, "(\.\d)|(\.\d{2})$") Then ConsoleWrite("+ with decimals :" & StringFormat("%12.2f", $sValue) & @CRLF) Else ConsoleWrite("> w\o decimals :" & StringFormat("%9i", $sValue) & @CRLF) EndIf EndFunc Depending on whether the value has one/two decimal places or none, it is formatted with different commands. 10 remains 10, but 10.00 also remains 10.00 (not 10). Edited July 28, 2020 by Musashi "In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move." Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted July 28, 2020 Moderators Share Posted July 28, 2020 4 hours ago, Musashi said: @Melba23 or @JLogan3o13 : Could you be so kind and move the thread https://www.autoitscript.com/forum/topic/203477-is-there-a-way-to-save-data-on-listview-to-a-txt-file-but-the-text-is-still-complete-i-did-but-failed/ over here. It is a bit confusing to answer the same questions in two threads . We have this awesome Report button at the top of the thread that can be used for this. That way, anyone with permissions to move or merge a topic can, instead of just two... Musashi 1 "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
dmob Posted July 28, 2020 Share Posted July 28, 2020 If your intention is printing, I'd recommend martin's printing UDF gives fine control over what and where to print. I used it successfully in my cash register app. Link to comment Share on other sites More sharing options...
Loc Posted July 28, 2020 Author Share Posted July 28, 2020 My money it could be 10,000, 100,000, 1,000,000. I will try to study more from everyone's examples Link to comment Share on other sites More sharing options...
Nine Posted July 28, 2020 Share Posted July 28, 2020 (edited) FileWriteLine($hF, StringFormat ("%-12s %8i %15s", $aValues[$i][0], $aValues[$i][1], StringRegExpReplace($aValues[$i][2],'\G(\d+?)(?=(\d{3})+$)','$1,'))) StringFormat cannot do it alone. SRER can help here. Implying here that there is never decimal point. Edited July 28, 2020 by Nine “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
Loc Posted July 29, 2020 Author Share Posted July 29, 2020 Although Money does not rank from left to right, thank you very much for your helpful and friendly help, especially @ Dan_555 and Nine. Link to comment Share on other sites More sharing options...
Dan_555 Posted July 29, 2020 Share Posted July 29, 2020 (edited) Well, here is a modified function, which calculates all 3 string lengths and aligns them accordingly expandcollapse popupFunc _Billplease() Local $filename = @ScriptDir & '\Billplease.txt' Local $hF = FileOpen($filename, 2) Local $w Local $wp[3], $tmp[3] For $x = 0 To 2 For $i = 1 To $aValues[0][0] If $x=2 Then $w=StringLen(StringRegExpReplace($aValues[$i][2], '\G(\d+?)(?=(\d{3})+$)', '$1,'))+1 Else $w = StringLen($aValues[$i][$x]) EndIf If $w > $wp[$x] Then $wp[$x] = $w Next $w = $wp[$x] If $w > 10 Then $w = $w - 10 $tmp[$x] = _StringRepeat(" ", $w) Else $wp[$x] = 10 EndIf Next FileWriteLine($hF, @MDAY & "." & @MON & "." & @YEAR) FileWriteLine($hF, "") FileWriteLine($hF, "Product " & $tmp[0] & "|" & $tmp[1] & " Amount |" & $tmp[2] & " Money ") FileWriteLine($hF, "") For $i = 1 To $aValues[0][0] FileWriteLine($hF, StringFormat("%-" & $wp[0] & "s %" & $wp[1] &".0f %" & $wp[2] &"s", $aValues[$i][0], $aValues[$i][1], StringRegExpReplace($aValues[$i][2], '\G(\d+?)(?=(\d{3})+$)', '$1,'))) Next FileWriteLine($hF, "") FileWriteLine($hF, "see you later!") FileClose($hF) $wp="" $tmp="" EndFunc ;==>_Billplease It works, as long as you do not add cents for the money. Edited July 29, 2020 by Dan_555 Some of my script sourcecode Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now