Variante 1: (zweitschnellster mit ultrakurzem Code)
Code: Alles auswählen
;Text2Array (PB 4.41)
;von DrFalo, ts-soft, ...
EnableExplicit
Procedure Text2Array(Datei.s, Array TextZeile.s(1))
Protected Text.s, TextZeilenAnzahl, A
Protected File = ReadFile(#PB_Any, Datei)
Protected *StringID
If File
*StringID = AllocateMemory(Lof(File))
If *StringID
ReadData(File, *StringID, Lof(File))
EndIf
CloseFile(File)
EndIf
Text = PeekS(*StringID)
FreeMemory(*StringID)
TextZeilenAnzahl = CountString(Text, #LF$)
If TextZeilenAnzahl
ReDim TextZeile(TextZeilenAnzahl)
File = ReadFile(#PB_Any, Datei)
If File
For A = 1 To TextZeilenAnzahl
TextZeile(A) = ReadString(File)
Next A
CloseFile(File)
EndIf
EndIf
EndProcedure
Define.s Datei
Define A
Dim TextZeile.s(1)
Datei.s = OpenFileRequester("Datei auswählen...", "", "Text (.txt)|*.txt", 0)
If Datei
Text2Array(Datei, TextZeile.s())
Debug "Insgesamt " + Str(ArraySize(TextZeile())) + " Zeilen"
Debug ""
For A = 1 To ArraySize(TextZeile())
If A = 10
Debug "u.s.w."
Break ; ab Zeile 10 abbrechen
EndIf
Debug "Zeile " + Str(A) + ": " + TextZeile(A)
Next A
EndIf
Code: Alles auswählen
;Text2Array (PB 4.41)
;von DrFalo, ts-soft, ...
EnableExplicit
Procedure Text2Array(Datei.s, Array TextZeile.s(1))
Protected Text.s, TextZeilenAnzahl, A, tmp.s
Protected File = ReadFile(#PB_Any, Datei)
Protected *StringID, *mem_u.Character, *mem_a.Byte
Protected Format, counter = 1
If File
Format = ReadStringFormat(File)
If Format = 4 Or Format = 5 Or Format = 6
Debug "Stringformat not supported"
CloseFile(File)
ProcedureReturn #False
EndIf
*StringID = AllocateMemory(Lof(File))
If *StringID
ReadData(File, *StringID, Lof(File))
EndIf
CloseFile(File)
EndIf
TextZeilenAnzahl = CountString(PeekS(*StringID, -1, Format), #LF$)
ReDim TextZeile(TextZeilenAnzahl)
If Format = #PB_Unicode
*mem_u = *StringID
While *mem_u\c <> 0
Select *mem_u\c
Case 13
Case 10
TextZeile(counter) = tmp
tmp = ""
counter + 1
Default
tmp + PeekS(*mem_u\c, 2, Format)
EndSelect
*mem_u + 2
Wend
Else
*mem_a = *StringID
While *mem_a\b <> 0
Select *mem_a\b
Case 13
Case 10
TextZeile(counter) = tmp
tmp = ""
counter + 1
Default
tmp + PeekS(*mem_a, 1, Format)
EndSelect
*mem_a + 1
Wend
EndIf
FreeMemory(*StringID)
ProcedureReturn TextZeilenAnzahl
EndProcedure
Define.s Datei
Define TextZeilenAnzahl, A
Dim TextZeile.s(1)
Datei = OpenFileRequester("Datei auswählen...", "", "Text (.txt)|*.txt", 0)
If Datei
TextZeilenAnzahl = Text2Array(Datei, TextZeile())
Debug "Insgesamt " + Str(TextZeilenAnzahl) + " Zeilen"
Debug ""
For A = 1 To TextZeilenAnzahl
If A = 10
Debug "u.s.w."
Break ; ab Zeile 10 abbrechen
EndIf
Debug "Zeile " + Str(A) + ": " + TextZeile(A)
Next A
EndIf
Code: Alles auswählen
;Text2Array (PB 4.50 beta 2)
;von DrFalo, ts-soft, NicTheQuick, ...
EnableExplicit
Procedure Text2Array(Datei.s, Array TextZeile.s(1))
Protected cLines.i, fileSize.i, stringFormat.i
Protected hFile = ReadFile(#PB_Any, Datei)
Protected *memBegin, *mem, i.i, *memEnd, *lineBegin, ca.a, cc.c
Protected NewList lineBegins.i()
If hFile
stringFormat = ReadStringFormat(hFile)
fileSize = Lof(hFile)
If fileSize = 0 : ProcedureReturn : EndIf
*memBegin = AllocateMemory(fileSize)
If *memBegin
ReadData(hFile, *memBegin, fileSize)
EndIf
CloseFile(hFile)
EndIf
If Not *memBegin : ProcedureReturn : EndIf
*mem = *memBegin
*memEnd = *mem + fileSize
Select stringFormat
Case #PB_Ascii
Debug "ASCII"
*lineBegin = *mem
While *mem < *memEnd
ca = PeekA(*mem)
Select ca
Case #CR
PokeA(*mem, 0)
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
If PeekA(*mem + 1) = #LF : *mem + 1 : EndIf
*lineBegin = *mem + 1
Case #LF
PokeA(*mem, 0)
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
*lineBegin = *mem + 1
EndSelect
*mem + 1
Wend
If *lineBegin < *memEnd
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
EndIf
Case #PB_UTF8
Debug "UTF8"
;TODO
Case #PB_Unicode
Debug "UNICODE"
*lineBegin = *mem
While *mem < *memEnd
cc = PeekC(*mem)
Select cc
Case #CR
PokeC(*mem, 0)
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
If PeekC(*mem + 2) = #LF : *mem + 1 : EndIf
*lineBegin = *mem + 2
Case #LF
PokeC(*mem, 0)
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
*lineBegin = *mem + 2
EndSelect
*mem + 2
Wend
If *lineBegin < *memEnd
If AddElement(lineBegins())
lineBegins() = *lineBegin
EndIf
EndIf
Default
ProcedureReturn
EndSelect
cLines = ListSize(lineBegins())
ReDim TextZeile(cLines - 1)
i = 0
ForEach lineBegins()
TextZeile(i) = PeekS(lineBegins(), -1, stringFormat)
i + 1
Next
FreeMemory(*memBegin)
EndProcedure
Define.s Datei
Define A, time.i
Dim TextZeile.s(0)
Datei.s = OpenFileRequester("Datei auswählen...", "", "Text (.txt)|*.txt", 0)
If Datei
time.i = ElapsedMilliseconds()
Text2Array(Datei, TextZeile.s())
time = ElapsedMilliseconds() - time
MessageRequester("", "Zeit: " + Str(time) + " ms") ;28 ms
Debug "Insgesamt " + Str(ArraySize(TextZeile()) + 1) + " Zeilen"
Debug ""
For A = 0 To ArraySize(TextZeile())
If A = 200
Debug "u.s.w."
Break ; ab Zeile 10 abbrechen
EndIf
Debug "Zeile " + Str(A) + ": " + TextZeile(A)
Next A
EndIf

Ja Sorry.
