Hi, im moment sitze ich an einem Projekt, welches ich vor einiger Zeit schon einmal begonnen hatte. Da ich jedoch eine lange Zeit nichts mehr mit VB o.ä. zu tun hatte, bin ich nun in einer "Haarraufsituation".
Es geht darum, dass ich ein Programm habe, welches Textdateien einlesen soll und gewisse Textblöcke beginnend mit dem string "ctxt" und endend mit "done" oder "sdone" auslesen lassen möchte.
In den Textdateien kommen done und sdone unterschiedlich zusammen.
Hier ein kleiner Auszug der Textdatei:
-------------------------------------------------------------------------
Orphanage_MapScriptHeader;trigger count
db 0
;callback count
db 0
adopt_mon: MACRO
; input: pokemon, level, orphan point cost
; output:
; 0. pokemon
; 1. level
; 2. orphan point cost
; 4. event flag
db \1, \2
dw \3, EVENT_ADOPTED_\1
ENDM
OrphanageDonationLady:
faceplayer
opentext
checkevent EVENT_GET_ORPHAN_CARD
sif false, then
writetext .first_welcome_text
verbosegiveitem ORPHAN_CARD, 1
waitbutton
writetext .received_orphan_card_text
setevent EVENT_GET_ORPHAN_CARD
endtext
sendif
checkcode VAR_PARTYCOUNT
sif <, 2
jumptext .only_mon_text
writetext .which_mon_text
special Special_SelectMonFromParty
sif false
jumptext .cancelled_text
sif =, $ff
jumptext .invalid_mon_text
sif =, EGG
jumptext .egg_text
callasm IsThisPokemonPlayerLarvitar
sif true
jumptext .invalid_mon_text
callasm OrphanageCalculatePoints
writetext .confirmation_text
yesorno
sif true, then
callasm .process_donation
writetext .thank_you_text
callasm DeletePartyPoke
special HealParty
playwaitsfx SFX_HEAL_
sendif
jumptext .parting_text
.process_donation
ld hl, wOrphanageDonation1
push hl
ld de, wOrphanageDonation2
ld c, wOrphanageDonationEnd - wOrphanageDonation2
.shift_loop
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .shift_loop
call UpdateTime
ld a, [wCurPartySpecies]
pop hl
ld [hli], a
ld de, wCurYear
rept 2
ld a, [de]
inc de
ld [hli], a
endr
ld a, [de]
ld [hl], a
ld a, [wCurPartySpecies]
call PlayCry
ld hl, TempNumber
ld a, [hli]
ld [hMoneyTemp], a
ld a, [hl]
ld [hMoneyTemp + 1], a
ld bc, hMoneyTemp
push hl
callba GiveOrphanPoints
pop hl
ld a, [hld]
ld b, [hl]
ld hl, wAccumulatedOrphanPoints + 3
add [hl]
ld [hld], a
ld a, b
adc [hl]
ld [hld], a
ret nc
inc [hl]
ret nz
dec hl
inc [hl]
ret
.only_mon_text
ctxt "Du kannst uns dein"
line "einziges Hemd"
cont "nicht überlassen."
done
.which_mon_text
ctxt "Willkommen beim"
line "kleinen"
cont "Weisenhaus."
para "Wie können"
line "wir dir behilflich"
cont "sein?"
sdone
.cancelled_text
ctxt "Hast du deine"
line "Meinung geändert?"
para "Wenn du es doch"
line "übers Herz"
cont "bringen kannst,"
para "wir sind hier und"
cont "erwarten dich."
done
-------------------------------------------------
Grün markierte Stellen sind die einzig relevanten hierfür.
Hier mein Lösungsansatz, der überhaupt nicht das macht wie ich es mir vorgestellt hatte...
Denke es liegt daran, dass ich keine 2 möglichen end-stings angeben kann aber ich steh momentan wirklich auf dem Schlauch.
Danke schon einmal im Voraus
Es geht darum, dass ich ein Programm habe, welches Textdateien einlesen soll und gewisse Textblöcke beginnend mit dem string "ctxt" und endend mit "done" oder "sdone" auslesen lassen möchte.
In den Textdateien kommen done und sdone unterschiedlich zusammen.
Hier ein kleiner Auszug der Textdatei:
-------------------------------------------------------------------------
Orphanage_MapScriptHeader;trigger count
db 0
;callback count
db 0
adopt_mon: MACRO
; input: pokemon, level, orphan point cost
; output:
; 0. pokemon
; 1. level
; 2. orphan point cost
; 4. event flag
db \1, \2
dw \3, EVENT_ADOPTED_\1
ENDM
OrphanageDonationLady:
faceplayer
opentext
checkevent EVENT_GET_ORPHAN_CARD
sif false, then
writetext .first_welcome_text
verbosegiveitem ORPHAN_CARD, 1
waitbutton
writetext .received_orphan_card_text
setevent EVENT_GET_ORPHAN_CARD
endtext
sendif
checkcode VAR_PARTYCOUNT
sif <, 2
jumptext .only_mon_text
writetext .which_mon_text
special Special_SelectMonFromParty
sif false
jumptext .cancelled_text
sif =, $ff
jumptext .invalid_mon_text
sif =, EGG
jumptext .egg_text
callasm IsThisPokemonPlayerLarvitar
sif true
jumptext .invalid_mon_text
callasm OrphanageCalculatePoints
writetext .confirmation_text
yesorno
sif true, then
callasm .process_donation
writetext .thank_you_text
callasm DeletePartyPoke
special HealParty
playwaitsfx SFX_HEAL_
sendif
jumptext .parting_text
.process_donation
ld hl, wOrphanageDonation1
push hl
ld de, wOrphanageDonation2
ld c, wOrphanageDonationEnd - wOrphanageDonation2
.shift_loop
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .shift_loop
call UpdateTime
ld a, [wCurPartySpecies]
pop hl
ld [hli], a
ld de, wCurYear
rept 2
ld a, [de]
inc de
ld [hli], a
endr
ld a, [de]
ld [hl], a
ld a, [wCurPartySpecies]
call PlayCry
ld hl, TempNumber
ld a, [hli]
ld [hMoneyTemp], a
ld a, [hl]
ld [hMoneyTemp + 1], a
ld bc, hMoneyTemp
push hl
callba GiveOrphanPoints
pop hl
ld a, [hld]
ld b, [hl]
ld hl, wAccumulatedOrphanPoints + 3
add [hl]
ld [hld], a
ld a, b
adc [hl]
ld [hld], a
ret nc
inc [hl]
ret nz
dec hl
inc [hl]
ret
.only_mon_text
ctxt "Du kannst uns dein"
line "einziges Hemd"
cont "nicht überlassen."
done
.which_mon_text
ctxt "Willkommen beim"
line "kleinen"
cont "Weisenhaus."
para "Wie können"
line "wir dir behilflich"
cont "sein?"
sdone
.cancelled_text
ctxt "Hast du deine"
line "Meinung geändert?"
para "Wenn du es doch"
line "übers Herz"
cont "bringen kannst,"
para "wir sind hier und"
cont "erwarten dich."
done
-------------------------------------------------
Grün markierte Stellen sind die einzig relevanten hierfür.
Hier mein Lösungsansatz, der überhaupt nicht das macht wie ich es mir vorgestellt hatte...
VB.NET-Quellcode
- Public LineCNT As Integer = 0, ASMSearcher As New FolderBrowserDialog
- Dim PARAANDLINE As Boolean = False, backuptext As New RichTextBox
- Sub textsplitter()
- Dim LineIndex As Integer = 0, CurLine As Integer = 0
- For Each line As String In backuptext.Lines
- LineIndex = LineIndex + 1
- If line.Contains("ctxt") Then
- ' Text
- 'Dim Z As Integer = backuptext.Text.IndexOf("done")
- 'Dim Y As Integer = backuptext.Text.IndexOf("sdone")
- 'Dim STR As String = ""
- 'CurLine = LineIndex
- 'Dim N As New TreeNode With {.Text = backuptext.Lines(LineIndex - 2), .ToolTipText = LineIndex, .StateImageIndex = 0}
- 'TreeView1.Nodes(0).Nodes.Add(N)
- MsgBox(TextTeiler(backuptext.Text, backuptext.Lines(LineIndex - 2), "done" or "sdone"))
- End If
- Next
- End Sub
- Public Function TextTeiler(ByVal GanzerText As String, ByVal ErsterString As String, ByVal LetzterString As String)
- Dim Anfang As Integer, Ende_ As Integer, Start_ As Integer
- Anfang = GanzerText.IndexOf(ErsterString, StringComparison.CurrentCultureIgnoreCase)
- If Anfang >= 0 Then
- Start_ = Start_ + ErsterString.Length
- Ende_ = GanzerText.IndexOf(LetzterString, Start_, StringComparison.CurrentCultureIgnoreCase)
- If Ende_ >= 0 Then
- Return GanzerText.Substring(Anfang, Ende_ - Anfang)
- End If
- End If
- Return "Nicht geklappt"
- End Function
- Private Sub OpenASMDIR_Click(sender As Object, e As EventArgs) Handles OpenASMDIR.Click
- If ASMSearcher.ShowDialog() = DialogResult.OK Then
- ASM_Dir.Text = ASMSearcher.SelectedPath
- End If
- reload_asm(ASM_Dir.Text)
- End Sub
- Private Sub ListView1_DoubleClick(sender As Object, e As EventArgs) Handles ListView1.DoubleClick
- If ListView1.SelectedItems.Count = 1 Then
- backuptext.Text = ListView1.SelectedItems.Item(0).SubItems(1).Text
- TreeView1.Nodes.Clear()
- TreeView1.Nodes.Add(ListView1.SelectedItems.Item(0).Text)
- textsplitter()
- End If
- End Sub
- Sub reload_asm(ByVal Direct As String)
- Try
- For Each listFiles As String In IO.Directory.GetFiles(Direct, "*.asm")
- Dim I As New ListViewItem With {.Text = IO.Path.GetFileName(listFiles), .ImageIndex = 0}
- 'ListView1.Items.Add(IO.Path.GetFileName(listFiles))
- I.SubItems.Add(IO.File.ReadAllText(listFiles, System.Text.Encoding.Default))
- ListView1.Items.Add(I)
- Next
- Catch ex As Exception
- End Try
- End Sub
Denke es liegt daran, dass ich keine 2 möglichen end-stings angeben kann aber ich steh momentan wirklich auf dem Schlauch.
Danke schon einmal im Voraus