xcaliber13

Find string Copy text

8 posts in this topic

#1 ·  Posted

Can someone point me in the right direction please.   I have a text find that looks like this:

01|  varying amount of data

02 | varying amount of data

03 | varying amount of data

04|  varying amount of data

05 | varying amount of data

06 | varying amount of data

07|  varying amount of data

08 | varying amount of data

09 | varying amount of data

10|  varying amount of data

11 | varying amount of data 

Repeats until end of file.  The amount of lines vary between  01  and  13.    Each is a record that starts with the 01 line of text.

On line 02  I have a date  YYMMDD.   This is the string I will search for.   Once this string is found I want to copy that record  Lines 01 - until next 01

I have no problem finding the string.   But how do I select this record (lines 01 - until next 01)  once the string is found?  

An example would be great but just a point in the right direction would be good.

Thank you

Share this post


Link to post
Share on other sites



#2 ·  Posted

Can you provide an example text file?  Also what does "Once this string is found I want to copy that record Lines 01 - until next 01"?  I would suggest _FileReadToArray Then _ArraySearch or _ArrayFindAll then you can specify what row to copy, but unsure exactly what information you want to retain/replace?

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

$sourcearray = stringsplit on @CR

$all_01_lines = _ArrayFindAll  the 01 line of texts in the $sourcearray

then you can search the $sourcearray[$all_01_lines[$i]] to $sourcearray[$all_01_lines[$i+1] for the matching string and take just that group if it exists

Edited by iamtheky

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

Share this post


Link to post
Share on other sites

#4 ·  Posted

here is my thought in code form, with an example text that I shat

string.txt

01LINE
000101
apples
bananas
01LINE
010101
cat
dog
pig
01LINE
020101
car
airplane
boat
01LINE
030101
knife
gun
artillery
#include<array.au3>

$aArr = stringsplit(fileread("string.txt") , @CRLF , 3)
$aFind = _ArrayFindAll($aArr , "01LINE" , 0 , 0 , 0 , 2)

;~ $date = "000101"
;~ $date = "010101"
$date = "020101"
;~ $date = "030101"

For $i = 0 to ubound($aFind) - 1

    $search = $i = ubound($aFind) - 1 ? _ArraySearch($aArr , $date , $aFind[$i]) : _ArraySearch($aArr , $date , $aFind[$i] , $aFind[$i + 1] , 0 , 1)

        If $search <> -1 then
            $sOut = $i < ubound($aFind) - 1 ?   _ArrayToString($aArr , @CR , $aFind[$i] + 1 , $aFind[$i + 1] - 1) : _ArrayToString($aArr , @CR , $aFind[$i] + 1 , -1)
            msgbox(0, '' , $sOut)
        EndIf

next

 


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

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

iamtheky,

$date = "020101"

Local $yes
$aArr = stringsplit(fileread("string.txt") , "01LINE" & @crlf , 3)
For $i = 0 to ubound($aArr) - 1
   If StringLeft($aArr[$i], 6) = $date Then $yes = $aArr[$i]
Next
Msgbox(0,"", $yes)

Please note that this doesn't use regex  :)

Edited by mikell
1 person likes this

Share this post


Link to post
Share on other sites

#6 ·  Posted

im so proud, that's a much better split (if my text ends up being similar to the OPs)


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

Share this post


Link to post
Share on other sites

#7 ·  Posted

2 hours ago, mikell said:

Please note that this doesn't use regex  :)

Since you mentioned it...

$date = "020101"
local $sre = stringregexp(fileread(@scriptdir & "\string.txt"),'(?ims).*?(' & $date & '.*?)01line',3)
if isarray($sre) then msgbox(0,'Ha...Ha Mikell',$sre[0])

 


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

#8 ·  Posted (edited)

:P

BTW slightly better like this  '(?is)(' & $date & '.*?)(?:01line|$)'  so this also gets the result for $date = 030101 - and thus stings less iamtheky's eyes

Edited by mikell

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