Jump to content

Cutting a text when {digit} is seen

Recommended Posts

Hi all

i have a big amount of text files that is link this 


{3} Ceux qui

comparent leurs femmes
au dos de leurs mères,
puis reviennent sur ce
qu’ils ont dit, doivent
affranchir un esclave
avant d’avoir aucun
contact [conjugal] avec
leur femme. C’est ce dont
on vous exhorte. Et Allah est Parfaitement Connaisseur de ce que vous faites. {4} Mais
celui qui n’en trouve pas les moyens doit jeûner alors deux mois consécutifs avant d’avoir
aucun contact [conjugal] avec sa femme. Mais s’il ne peut le faire non plus, alors qu’il
nourrisse soixante pauvres. Cela, pour que vous croyiez en Allah et en Son messager.
Voilà les limites imposées par Allah. Et les mécréants auront un châtiment douloureux.



i want it to cut each part alone and the separator is bracket then number then bracket {NUM}

so the first one must be 


{3} Ceux qui

comparent leurs femmes
au dos de leurs mères,
puis reviennent sur ce
qu’ils ont dit, doivent
affranchir un esclave
avant d’avoir aucun
contact [conjugal] avec
leur femme. C’est ce dont
on vous exhorte. Et Allah est Parfaitement Connaisseur de ce que vous faites. 
i tried this 
#include <Array.au3>


$sResult=StringRegExpReplace($sString,"(\{\d{1,}\})",@CR & "$1")

;If you want it in an array add this:

$var = 1
For $i = 1 To $array[0]
     FileWrite(@DesktopDir & "\sura\" & $var & ".txt" , $array[$i] & @CRLF)
$var = $var + 1
it is cutting the text when it see the {NUM} but it is also cutting it when it see a new line
i want it to complete the sentence even if it is on 2 lines 
any ideas ?
Edited by Alexxander

Link to post
Share on other sites

You can't use _StringBetween?

I have missunderstood :D

See if this is useful:

#include <Array.au3>

$sString = ClipGet()
$aDelim = StringRegExp($sString, "{.}", 3)
$aParts = StringSplit(StringRegExpReplace($sString, "{.}", "*|*"), "*|*", 3)

For $i = 0 To UBound($aDelim) - 1
    $aParts[$i + 1] = $aDelim[$i] & $aParts[$i + 1]

$aParts[0] = UBound($aDelim)
Edited by Terenz

Nothing is so strong as gentleness. Nothing is so gentle as real strength


Link to post
Share on other sites

This should do the work :

#include <Array.au3>
$sString = ClipGet()

$aResult = StringRegExp($sString,'(?s){([^{]+)', 3)

For $i = 0 to UBound($aResult)-1
    $n = StringRegExpReplace($aResult[$i], '(?s)(^\d+).+', "$1")
    $txt = StringReplace(StringRegExpReplace($aResult[$i], '(^\d+}\s*)', ""), @crlf, " ")
   FileWrite(@DesktopDir & "\sura " & $n & ".txt" , $txt & @CRLF)
Edited by mikell
Link to post
Share on other sites


Another alternative...

#include <array.au3>
#include <file.au3>

local $str = fileread(@scriptdir & '\' & 'test10.txt')

local $array = stringregexp($str,'(?m)\{[^\{]+',3)      ; include curly braces
;local $array = stringregexp($str,'(?m)\} ([^\{]+)',3)  ; exclude curly braces

_FileWriteFromArray(@scriptdir & '\test010_out.txt',$array)

shellexecute(@scriptdir & '\test010_out.txt')


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

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By ni3dprint
      Hi folks, 
      Thank you so much in advance for your help!  I've been using AUTOIT for manipulating gcode.  So far I've just worked through the excellent help examples and although I'm sure the resulting code is clumsy it has functioned  
      However now I'm trying to improve and advance things and I've stumbled across REGEX.. and I'm a bit stuck.  What I would like to be able to do is to 'move'/'transform' the gcode in a file and re-write it to a new file.  I only need to move it in one direction(X).  At the heart of this I need a script to extract all the X values and then ADD or SUBTRACT an adjustment factor to transform and rewrite the code accordingly.
      So far using an example script and an example input -
      Func Test2()
      Local $iMove = -4
          Local $sInput = '"G1 X45.036 Y6.934 F7800.000 G1 Z0.600 F7800.000 G1 F900 G1 X48.036 Y1.076 E0.58925"'
          Local $sOutput = StringRegExpReplace($sInput, '(?<=[X])\d+.\d+', '\0')
          Display($sInput, $sOutput)
      EndFunc   ;==>Test2
      This identifies the correct values i.e 45.036 and 48.036 but is there a way to dyamically adjust them before they are replaced, by for example a factor of -4 ($iMove above).  So far I can't seem to do math on the '\0' value i.e '\0'+ -4 ?
      Many thanks for your time and expertise!
    • By jmp
      i am trying to get number from string using this code :
      #include <IE.au3> $oIE = _IEAttach ("Edu.corner") Local $aName = "Student name & Code:", $iaName = "0" Local $oTds = _IETagNameGetCollection($oIE, "td") For $oTd In $oTds If $oTd.InnerText = $aName Then $iaName = $oTd.NextElementSibling.InnerText $iGet = StringRegExpReplace($iaName, "\D", "") EndIf Next MsgBox(0, "", $iGet) it was get number like 52503058
      But, I want to get only student code 5250. (Different student have different code, sometime its 3 digits, Sometime 4)

    • By jmp
      I am adding labour charge to total paid amount using : 
      #include <IE.au3> #include <Array.au3> $oIE = _IEAttach ("Shop") $oTable = _IETableGetCollection ($oIE, 1) $aTableData3 = _IETableWriteToArray ($oTable) Local $sitem1 = $aTableData3[5][1] Local $sitem2 = $aTableData3[5][2] Local $lcharge = "10" ;add manualy using inputbox, becuase not generating online Local $atotPric = "Payable Total Price " Local $oTds = _IETagNameGetCollection($oIE, "td") For $oTd In $oTds If $oTd.Innertext = $atotPric Then $iatotPric = $oTd.NextElementSibling.innertext MsgBox (0, "2", $iatotPric) EndIf Next $irCtotal = StringFormat("%.2f", $sitem1 + $sitem2 + $lcharge) $crTotp = StringReplace(_IEBodyReadHTML($oIE), $iatotPric, $irCtotal) _IEBodyWriteHTML ($oIE, $crTotp) But, It was also changing Total price, I want to change only Payable Total Price.

    • By nacerbaaziz
      hello sirs
      i've some questions about StringRegExpReplace i hope you can help me
      i tried to make a function that give me the host of the url and other give me the url with out host
      for example i've this link
      i need the first give me the
      and the other give me 
      i find that
      $s_source = "https://www.google.com/vb/index.php" Local $s_Host = StringRegExpReplace($s_Source, '.*://(.*?)/.*', '\1') Local $s_Page = StringRegExpReplace($s_source, '.*://.*?(/.*)', '\1') msgBox(64, $s_Host, $s_Page)  
      but i found some problems i need your help to correct it
      first: when i get the host if the url has www i want to remove it
      second: if the url with out host did not have other things 
      i need the result to be ""
      the first i want it
      and the second i want it to be ""
      i hope that you can help me
      thanks in advance
    • By fs1234
      I would like to change the hungarian characters in a string, but I can't figure out how to do it.
      Help, pls.
      #include <MsgBoxConstants.au3> Local $sInput = "Árvíztűrő tükörfúrógép" Local $sOutput = StringRegExpReplace($sInput, "(?-i)(á)|(Á)|(é)|(É)|(í)|(Í)|(ó)|(Ó)|(ö)|(Ö)|(ő)|(Ő)|(ú)|(Ú)|(ü)|(Ü)|(ű)|(Ű)", "(?1a)(?2A)(?3e)(?4E)(?5i)(?6I)(?7o)(?8O)(?9o)(?10O)(?11o)(?12O)(?13u)(?14U)(?15u)(?16U)(?17u)(?18U)") Display($sInput, $sOutput) Func Display($sInput, $sOutput) ; Format the output. Local $sMsg = StringFormat("Input:\t%s\n\nOutput:\t%s", $sInput, $sOutput) MsgBox($MB_SYSTEMMODAL, "Results", $sMsg) EndFunc ;==>Display  
  • Create New...