Jump to content
Sign in to follow this  
Rhazz

Logic problem: "For" loop and multiple file creating/editing

Recommended Posts

Rhazz

Hello. First of all, my full code:

#include <WinAPI.au3>
#include <File.au3>
#include <String.au3>

Local $aFiles, $IntOrFloat
Local $aFileToRead = _WinAPI_GetOpenFileName("Open file to read", "Text Files (*.txt)")
Local $aFinalFile = _WinAPI_GetSaveFileName("How do you want to save the file?", "Text Files (*.txt)")
Local $sFilenameWithoutExtension = _StringBetween($aFinalFile[2],"",".")
Local $sLinesPerLine = InputBox("Lines Per Line", "How many lines per line do you want?","","")
Local $sCountLines = _FileCountLines($aFileToRead[2])

If ($sCountLines/$sLinesPerLine) >= 1 Then ; When the division result is a number with decimal, there will be less words in the last file and the script won't create it , therefore I add 1 to the result to prevent a file lack. Am I wrong? For example: if user introduces 3 the operation will be "4/3=1.33" and I need two files, the first "line1,line2,line3" and the second "line4".
    $IntOrFloat = $sCountLines/$sLinesPerLine
Else
    $IntOrFloat = ($sCountLines/$sLinesPerLine) + 1
EndIf


For $i = 1 To $IntOrFloat
    MsgBox(0,"", "Creating file " & $i)
    $aFiles = $aFinalFile[1] & "\" & $sFilenameWithoutExtension[0] & "-" & $i & ".txt"
    _FileCreate($aFiles)
    FileOpen($aFiles,2)
    For $a = ( ( ( $i - 1 ) * $sLinesPerLine ) + 1 ) To ( $i * $sLinesPerLine )
        FileWrite($aFinalFile[2],FileReadLine($aFileToRead[2], $a) & ",")
    Next
    FileClose($aFiles)
Next

MsgBox(0,"Done","Done")

With it I want to read a text file with a lot of lines and I wanna split it in multiple files with multiple lines (of the first file) in each line, separated by commas.

For example: the user executes the script and selects a text file to open that contains:

Line 1 asdf

Line 2 asdf

Line 3 asdf

Line 4 asdf

Then, the user selects the path and name of the result files. Suppose "C:\result.txt"

Finally, the user introduces the number of lines per line (lines of the initial text file to each line of the result text files). Suppose the user enters 2.

So far my code works fine. But I tried to code a loop for do (continuing the example):

  • Start first loop repetition.
  • Create "C:\result.-1.txt", and write on it "Line 1 asdf,Line 2 asdf"
  • End first loop repetition.
  • Start second loop repetition.
  • Create "C:\result.-2.txt", and write on it "Line 3 asdf,Line 4 asdf"
  • End second loop repetition.

But my code results (continuing the example) in three files created:

  • C:\result.txt that contains "Line 1 asdf,Line 2 asdf,Line 3 asdf,Line 4 asdf,"
  • C:\result.-1.txt that contains nothing.
  • C:\result.-2.txt that contains nothing.

Where is the error? I can't understand where is it... :(

Share this post


Link to post
Share on other sites
JohnOne

At a quick glance I think maybe this line...

FileWrite($aFinalFile[2],FileReadLine($aFileToRead[2], $a) & ",")

Should be...

FileWrite($aFiles,FileReadLine($aFileToRead[2], $a) & ",")

Of course I could be wrong, but if I'm not you should also close that file in the loop the line is in.

  • Like 1

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites
Rhazz

At a quick glance I think maybe this line...

FileWrite($aFinalFile[2],FileReadLine($aFileToRead[2], $a) & ",")

Should be...

FileWrite($aFiles,FileReadLine($aFileToRead[2], $a) & ",")

Of course I could be wrong, but if I'm not you should also close that file in the loop the line is in.

Yes! There is it. When I read it I can find the mistake... and I tried and it worked!

Thanks :)

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
Sign in to follow this  

  • Similar Content

    • nacerbaaziz
      By nacerbaaziz
      Hello
      I have a query please
      It is about windows file explorer
      If i design a tool in autoit language to delete files for example
      and i  added it in the context menu in File Explorer
      If i right-click on any file And you choose the tool, it will be get the path of the selected file or folder
      The problem here is
      If i select a set of files or folders
      it only detect the first one
      The code that i  used is
      if $CMDLine[0] = 0 then
      msgBox(16, "error", "you don't selecte any files")
      exit
      else
      for $i = 1 to $CMDLine[0]
      msgBox(0, "files", $CMDLine[$i]
      next
      endIf
      exit
    • nacerbaaziz
      By nacerbaaziz
      Hello my friends
      I have an inquiry and I hope to find the answer here
      I want to create a graphical user interface
      but I want to hide the system menu
      I mean the window menu
      Is this possible?
      If is possible please give me how to do that
      Thanks in advance
    • Trisha
      By Trisha
      Hello,
      I Have clicked on save as option to save a file, while doing that I need to rename a file appending with sysdate. I have searched in google find the below one line of code:
      FileMove("C:\somefile.txt", "C:\somefile1.txt"), When I am trying to append with sysdate. It is not happening. Please help me out  with the small issue.
    • MrCheese
      By MrCheese
      Hi guys,
       
      Wondering, is there a better way, likely to use 'for...next' to add a letter to each range, by moving right -> along a range of columns in excel.
      I currently use this, but its clunky.
      If $run = 1 Then $range = "B6:B41" If $run = 2 Then $range = "C6:C41" If $run = 3 Then $range = "D6:D41" If $run = 4 Then $range = "E6:E41" If $run = 5 Then $range = "F6:F41" If $run = 6 Then $range = "G6:G41" If $run = 7 Then $range = "H6:H41" If $run = 8 Then $range = "I6:I41" If $run = 9 Then $range = "J6:J41" If $run = 10 Then $range = "K6:K41" If $run = 11 Then $range = "L6:L41" If $run = 12 Then $range = "M6:M41" If $run = 13 Then $range = "N6:N41" If $run = 14 Then $range = "O6:O41" If $run = 15 Then $range = "P6:P41" If $run = 16 Then $range = "Q6:Q41" If $run = 17 Then $range = "R6:R41" If $run = 18 Then $range = "S6:S41" If $run = 19 Then $range = "T6:T41" If $run = 20 Then $range = "U6:U41" If $run = 21 Then $range = "V6:V41" If $run = 22 Then $range = "W6:W41" If $run = 23 Then $range = "X6:X41" If $run = 24 Then $range = "Y6:Y41" If $run = 25 Then $range = "Z6:Z41" If $run = 26 Then $range = "AA6:AA41" If $run = 27 Then $range = "AB6:AB41" If $run = 28 Then $range = "AC6:AC41" If $run = 29 Then $range = "AD6:AD41" If $run = 30 Then $range = "AE6:AE41" If $run = 31 Then $range = "AF6:AF41" If $run = 32 Then $range = "AG6:AG41" If $run = 33 Then $range = "AH6:AH41" If $run = 34 Then $range = "AI6:AI41" If $run = 35 Then $range = "AJ6:AJ41" If $run = 36 Then $range = "AK6:AK41" If $run = 37 Then $range = "AL6:AL41" If $run = 38 Then $range = "AM6:AM41" If $run = 39 Then $range = "AN6:AN41" If $run = 40 Then $range = "AO6:AO41" If $run = 41 Then $range = "AP6:AP41" If $run = 42 Then $range = "AQ6:AQ41" If $run = 43 Then $range = "AR6:AR41" If $run = 44 Then $range = "AS6:AS41" If $run = 45 Then $range = "AT6:AT41" If $run = 46 Then $range = "AU6:AU41" If $run = 47 Then $range = "AV6:AV41" If $run = 48 Then $range = "AW6:AW41" If $run = 49 Then $range = "AX6:AX41" If $run = 50 Then $range = "AY6:AY41"  
      Normally, if it was going down the rows, i'd use this:
       
      For $i = 0 To UBound($iRowCount) - 1 $row = $i + 1 $range = "B"&$row&":B"&$row+1 Next  
      so something like this, but i don't know how to code sequential columns:
      For $i = 0 To UBound($iColCount) - 1 $col = $i + 1 $range = $col&"1:"&$col&"40" Next  
      If I don't make sense, let me know.
      Any help would be great. thanks
    • nacerbaaziz
      By nacerbaaziz

      Hello all
      I have a question please
      this  a question is about the context menu
      When i create a list box  Or combo box
      if i create a context menu for this list
      When i press the application key or the shortcut shift + f10
      the menu options is appear normally
      but When i create a List view
      if i create a context menu for this list
      When i press the application key or the shortcut shift + f10
      the menu options isn't appear
      But the right mouse button works normally
      I need a solution please because I deal with the screen readers users
      Unfortunately They can not use the mouse to navigate
      So I have to find a solution to activate keyboard shortcuts
      am waiting  for your help
×