Dobrý den, řešení je jako vždy několik, rozhodující je, s jakou proměnnou chcete pracovat (a to je nutné hodnotit zejména z hlediska velikosti zpracovávaných souborů a funkcionality, kterou má aplikace realizovat). V úvahu připadají např.: a) řetězec (triviální realizace, snadná implementace funkcí typu paste/cut, horší při raálných odezvách s většími soubory) b) nějaký vhodný typ kolekce či vlastní implementace zřetězeného seznamu (poněkud obtížnější realizace, možné dlouhé soubory a přitom velice rychlé zpracování) c) pole řetězců (obdoba b, ale značná časová náročnost při vkládání řádků,...) A ještě poznámka - co když uživatel při editaci smaže číslo řádku? ad a)
Dim s as string
s=mujBox.text
Dim i as integer =0 'např.: pozor! omezení velikosti!!
a cyklus na rozebrání a složení bude vycházet z příkladu na konci tohoto příspěvku (jen se to nebude strkat do pole, ale do řetězce + to zmíněné číslování)
Dim cil as sring=""
Dim j as integer=0
Dim k as integer
do while s.indexof(vbcr,j)>-1
k=s.indexof(vbcr,j)
cil+=i & ": " & s.substring(j,k-j)
i++
j=k
loop
cil+=i & ": "s.substring(j)
mujBox.text=s 'a samozřejmě, že by to šlo i bez těch pomocných stringových proměnných, jenže takhle je to čitelnější...
ad b) lze použít již existující kolekce nebo si vytvořit vlastní objekt zřetězeného seznamu (tj. objekt, který má hodnotu /tj. řádek, který Vás ve výpisu zajímá/, ukazuje na sobě předcházející objekt /řádek/ a po něm následující objekt). Výhoda je zřejmá - při listování, vkládání apod stačí jen projít potřebný počet záznamů, upravit případně odkazy...=> rychlost a přitom žádné omezení velikostí řetězce,... ad c)velmi zlehka nastřeleno: nejprve naplnění ze souboru:
Dim a(1) as string
Dim i as integer =0 'např... pozor! omezení velikosti!!
Dim st as streamRider("c:\bla.txt") 'obdobně lze i z jiných zdrojů, občas je ale nutno dělit řádky (tj. hledat vbcr nebo vbcrlf)
mujBox.text=""
do while not st.endofstream
a(i)=st.readLine
i++
ReDim persistent A(i)
mujBox.text=i & ": " & a(i-1)
loop
st.close
'rozdělení řádků (bude to nutné trochu testovat na začátek a konec řádku, poslední řádek a pod... Prostě práce s indexy:-))):
Dim a(1) as string
Dim i as integer =0 'např... pozor! omezení velikosti!!
Dim s as string 'toto je "zdroj" s nedělenými řádky...
Dim j as integer=0
Dim k as integer
do while s.indexof(vbcr,j)>-1
k=s.indexof(vbcr,j)
a(i)=s.substring(j,k-j)
i++
ReDim persistent A(i)
j=k
loop
a(i)=s.substring(j)
Snad v tom není moc chyb a překlepů :-)))
|