Tak mě napadlo nevíte o nějaké utilitě, kam si člověk píše poznámky, když ladíte program krok po kroku a děláte si poznámky, kladete si otázky a odpovídáte si na ně... Asi jako tady jsem to řešil poznámkami do notepadu:
221 showmessage(RAMdisk_filename);
270 rds_vnumber := getVerseNumFromListSpec(RAM_disk_verses, RAM_disk_verses_current_rdp, 1, VERSE_PREFIX);
279 INC(RAM_disk_verses_current_rdp);
Add to RAM_disk_verses
412 countAdded := createListOfVerses(RAM_disk_file, RAM_disk_verses, rdpointer, last_versebnum_added);
417 RAM_disk_verses_current_rdp := 0;
When parsing the RAM disk file, there is one empty line after line of verse, so I skip it.
if RAM_disk_file[rdpointer]='' then
INC(rdpointer);
Takže dokončil první kapitolu, ale NEPŘIDAL SEZNAM ŘÁDKŮ TOHO SOUBORU
TStringList source do output... #318 až 319
#299
if rdpointer>RAM_disk_file.count-1 then
RAM_disk_output.add(RAM_disk_source[j]);
a=27
rdpointer=13 line #328
rdpointer=14 line #328
RAM_disk_source[26] is:
'*25 text'
OK.
a=27
# Parsing of the last block
#431
countAdded=6 #433
RAM_disk_verses[5]:
'*31 txt'
OK
?PROBLEM COULD BE HERE WITH SET VALUE?
#436
if countAdded>0 then
RAM_disk_verses_current_rdp := 1
Currently on #446,
způsobuje to, že přidá řádek z file navíc ještě před předáním verses do source list
NE NE NE!
#450
RAM_disk_source.add(RAM_disk_file[rdpointer])
JE ŠPATNĚ!!!
#440
RAM_disk_verses_current_rdp=1
**************************************************************
V DALŠÍ FÁZI JE TŘEBA OVĚŘIT, ŽE SE ZDROJOVÉ ŘÁDKY VERŠŮ SHODUJÍ S NAČTENÝMI
POLOŽKAMI ZE SOURCE. Dělám to?
#140
a=28
SourceTXTF[a]:
'*27 And Text'
OK
#267 if RAM_disk_verses.Count > 0 then
condition is True
#270
rds_vnumber := getVerseNumFromListSpec(RAM_disk_verses, RAM_disk_verses_current_rdp, 1, VERSE_PREFIX);
rds_vnumber=27
*************************************
ODPOVĚĎ: Ano, kontrola provedena zde:
if vers_s<>rds_vnumber then
showmessage('NEROVNOST ('+RAMdisk_filename+#13+'general verse '+vers_s+', row #'+inttostr(a+1)+','+#13+'rd verse: '+rds_vnumber+#13+'rd pointer: '+inttostr(rdpointer)+#13+'General verse text:'+#13+SourceTXTF[a]+#13+'RAM_disk_verses[RAM_disk_verses_current_rdp] text:'+#13+RAM_disk_verses[RAM_disk_verses_current_rdp])
else
#276 INC(RAM_disk_verses_current_rdp);
*******************
OTÁZKA: Je správně navýšení pointeru? RAM_disk_verses_current_rdp
Z předchozího vím, že RAM_disk_verses_current_rdp se má rovnat 1,
***********
ISSUE FOUND:
což indikuje problém, protože seznam položek source nebyl překontrolován
Není mimo rozsah souboru?
Stav RAM_disk_verses_current_rdp
#279 RAM_disk_verses_current_rdp=1
#279 RAM_disk_verses_current_rdp=2 (navýšeno)
RAM_disk_verses.count=6
RAM_disk_verses[5] stále ukazuje na verš 31
Dosaženo konece smyčky, pokračuje se v cyklu.
projedu několik cyklů a navýšení...
#277 RAM_disk_verses_current_rdp=5
***********************************
Kontrola posledního čísla verše proběhla v pořádku:
Prošlo
#279 RAM_disk_verses_current_rdp=6
RAM_disk_verses_current_rdp v dalším cyklu se má diagnostikovat
nevyhovující hodnota pointeru????
Nicméně na dalším řádku
#281 Vstup prvního bloku do podmínky
if RAM_disk_verses_current_rdp = RAM_disk_verses.count
Probíhá předání RAM_disk_verses do RAM_disk_source...
*********
V POŘÁDKU
*********
a=32 #290
*********************************************
ACTIVE ISSUE #1: #290 , po přidání verses do source TStringList
*********************************************
OTÁZKA:
Kde a kdy se přidá source list do output list? Mělo by to proběhnout teď nebo v další
smyčce?
*********************************************
ANALYZYUJU: #317-319
CHYBA NALEZENA:
for j:=0 to RAM_disk_source.count-1 do
RAM_disk_output.add(RAM_disk_source[j]);
RAM_disk_source.clear;
NICMÉNĚ PŘI a=32 na #285 teprve probíhá přidání veršů do source list.
ŘEŠENÍ:
Takže to patří do #290!!!
***********************
a=32 #290
#290
RAM_disk_verses.Clear;
!!!!!
POZOR ACTIVE ISSUE #2
!!!!!
v DALŠÍ SMYČCE SE UŽ NAČÍTÁ DALŠÍ KAPITOLA: GENESIS
NÁSLEDOVAL KRACH: #248
If RAM_disk_file[0] ... then
RAM_disk_source.add(RAM_disk_file[a])
PŘÍČINA:
Vytvoření source probíhá v druhé sekci!
a=33 #248
if (RAM_disk_file[0]<>'') AND
(rds_vnumber<>'') then
RAM_disk_source.add(RAM_disk_file[a])
PŘÍČINA:
RAM_disk_file.count = 17
index a = 33
Index out of bounds.
******************
OTÁZKA - ISSUE #3:
proč není nastaveno na a=0?
******************
ODPOVĚĎ - PŘÍČINA:
K RAM_disk_file se má přistupovat přes rdpointer,
rdpointer = 0; By nemohl krachnout.
Nicméně upozorňuji, že data stále nebyly přesunuty do RAM_disk_output:
RAM_disk_output.count = 0
*******************
NEXT ISSUES:
RAM_disk_source[0] obsahuje celý odstavec. Smazat.
RAM_disk_output obsahuje jen poslední skupinu veršů
Ale problém je v tom, že když udělám pár řádků změn, řádky se posunou, a už to přesně neodpovídá.
Ono by to chtělo aby takový externí program udělal kopii toho procházeného souboru a otevře soubor na tom konkrétním řádku o kterém v poznámce píšu. Takže každá poznámka má trochu jiný kód. V Delphi 7 taková utilita není tak něco externího?