How to loop for each line of a multi-line string

Originally posted by slecault on February 29, 2012

I need to split a text file into many small ones. My source text files are in the range of 1500 to 8000 lines.

The source file contains a list of controls with all their properties (this file is not generated within my code)

exemple:

…

[Control1]

Caption:‘hello’

With:12

Height:22

[Control333]

Caption:‘hello’

With:12

Height:22

From the above, I need to create a file for Control1 containing all the lines until Control333 is reached, then create another file…

What I have got so far is to read the file line by line with ReadLn, analyse the content, cumulate the lines and write the cumulated lines.

I saw that I could ReadAll lines at once.

My question, if all my text source lines are in a single variable, how can I loop trough this variable line by line?

Originally posted by HKosova on March 01, 2012

Hi Stephane,

Basically, you need to split the string by the new line character and then iterate through individual items in the resulting array. For example:

var arr = str.split("\r\n");for (var i = 0; i < arr.length; i++){  // Do something with arr}

You can also loop through the text using TestComplete’s aqString.GetListItem object if you set aqString.ListSeparator to the new line character (“\r\n” in JScript, vbNewLine constant in VBScript or #13#10 in DelphiScript). Have a look at examples in the linked topics.

By the way, your file looks similar to an INI file, only with a non-standard separator for name-value pairs.

If you could modify your file into:

; NB: The Root section is mandatory

[Root]

[Control1]

Caption=‘hello’

With=12

Height=22

[Control333]

Caption=‘hello’

With=12

Height=22

you’d be able to access the sections and name-value pairs using TestComplete’s Storages.INI API, instead of manually parsing the file.

Originally posted by slecault on March 05, 2012

I am using Delphi scripts…

I tried the aqstring approach. My data is actually comes from the clipboard and is then copied into a variable.

aqString.ListSeparator := ‘#13’; // I have tried #13#10, \r\n, #13

ShowMessage(MyTextToWrite); // Shows the entire variable human readable

ShowMessage(aqString.GetListLength(MyTextToWrite)); // in all attemps listed above, it returns the value 1, I tried ‘.’ (period) and it does return a large number not usable in this case.

How should I specify the CrLf in the ListSeperator ?

Here’s a paste of what was written to file using …(The file contains a little more than 14000 lines (331KB))

aqFile.WriteToTextFile(sPath, MyTextToWrite, aqFile.ctUTF8);

************************************************************

QA Title: GetQACurrentScreenInfo

QA From: frmRxPro.pgcMain.tbsSummary.fraSummary.pgcSummary.tbsDrug.fraDrug.dbgrdSummary

QA Début: 2012-03-05 11:37:24.278

************************************************************

[frmRxPro.pgcMain.tbsSummary.fraSummary.pgcSummary.tbsDrug.fraDrug (TframeSumDrug)]

Caption=

Align: alClient

AlignWithMargins: False

Anchors: [akLeft,akTop,akRight,akBottom]

AutoScroll: False

AutoSize: False

BiDiMode: bdLeftToRight

Color: 13160660

Constraints: (TSizeConstraints)

Constraints: MaxHeight: 0

Constraints: MaxWidth: 0

Constraints: MinHeight: 0

Constraints: MinWidth: 0

Ctl3D: True

Cursor: 0

CustomHint: (TCustomHint)

DockSite: False

DoubleBuffered: False

DragCursor: -12

DragKind: dkDrag

DragMode: dmManual

Enabled: True

Font: (TFont)

Font: Charset: 1

Font: Color: -16777208

Font: Height: -11

Font: Name: ‘Tahoma’

Font: Orientation: 0

Font: Pitch: fpDefault

Font: Size: 8

Font: Style:

Height: 535

HelpContext: 20100

HelpKeyword: ‘’

HelpType: htContext

Hint: ‘’

HorzScrollBar: (TControlScrollBar)

HorzScrollBar: ButtonSize: 0

HorzScrollBar: Color: -16777196

HorzScrollBar: Increment: 8

HorzScrollBar: Margin: 0

HorzScrollBar: ParentColor: True

HorzScrollBar: Position: 0

HorzScrollBar: Range: 0

HorzScrollBar: Size: 0

HorzScrollBar: Smooth: False

HorzScrollBar: Style: ssRegular

HorzScrollBar: ThumbSize: 0

HorzScrollBar: Tracking: False

HorzScrollBar: Visible: True

Left: 0

Margins: (TMargins)

Margins: Bottom: 3

Margins: Left: 3

Margins: Right: 3

Margins: Top: 3

Name: ‘fraDrug’

Padding: (TPadding)

Padding: Bottom: 0

Padding: Left: 0

Padding: Right: 0

Padding: Top: 0

ParentBackground: True

ParentBiDiMode: True

ParentColor: True

ParentCtl3D: True

ParentCustomHint: True

ParentDoubleBuffered: True

ParentFont: False

ParentShowHint: True

PopupMenu: (TPopupMenu)

ShowHint: False

TabOrder: 0

TabStop: False

Tag: 0

Top: 0

Touch: (TTouchManager)

Touch: GestureManager: (TCustomGestureManager)

Touch: InteractiveGestureOptions: [igoPanSingleFingerHorizontal,igoPanSingleFingerVertical,igoPanInertia,igoParentPassthrough]

Touch: InteractiveGestures: [igPan,igPressAndTap]

Touch: ParentTabletOptions: True

Touch: TabletOptions: [toPressAndHold]

VertScrollBar: (TControlScrollBar)

VertScrollBar: ButtonSize: 0

VertScrollBar: Color: -16777196

VertScrollBar: Increment: 8

VertScrollBar: Margin: 0

VertScrollBar: ParentColor: True

VertScrollBar: Position: 0

VertScrollBar: Range: 0

VertScrollBar: Size: 0

VertScrollBar: Smooth: False

VertScrollBar: Style: ssRegular

VertScrollBar: ThumbSize: 0

VertScrollBar: Tracking: False

VertScrollBar: Visible: True

Visible: True

Width: 982

[frmRxPro.pgcMain.tbsSummary.fraSummary.pgcSummary.tbsDrug.fraDrug.Label11 (TLabel)]

Caption=&Dossier:

Align: alNone

Alignment: taLeftJustify

AlignWithMargins: False

Anchors: [akLeft,akTop]

AutoSize: False

BiDiMode: bdLeftToRight

Caption: ‘&Dossier:’

Color: 13160660

Constraints: (TSizeConstraints)

Constraints: MaxHeight: 0

Constraints: MaxWidth: 0

Constraints: MinHeight: 0

Constraints: MinWidth: 0

Cursor: 0

CustomHint: (TCustomHint)

DragCursor: -12

DragKind: dkDrag

DragMode: dmManual

EllipsisPosition: epNone

Enabled: True

FocusControl: cboSumPeriod

Font: (TFont)

Font: Charset: 1

Font: Color: -16777208

Font: Height: -11

Font: Name: ‘Tahoma’

Originally posted by HKosova on March 05, 2012

Hi Stephane,

It should be #13#10 without the surrounding apostrophes: