| |
|
|
RudiB. | ¡Hola zusammen,
Yo stehe wohl a uno para mich schier unlösbaren Tarea. Yo möchte una Programa-Listing con Befehlszeilentrennung por Doppelpunkte, aufsplitten en separate Programmzeilen. Als Sonderfall se sin embargo una Línea con "Case" oder "CaseNot" beibehalten voluntad.
Hier veces una absolut Sinnfreies Listing y danach el Listing bereinigt.
...y así solls entonces aussehen.....Yo absolut no hinkriege !!!!
....z.B: alleine ya el String en VAR a$ con un Doppelpunkt en él es una Herausforderung dar...porque hier auch todavía el eigentliche Befehlszeile con un Backslash aufgesplittet se...
auch hier en el Foro se el erste Listing con el Cuerdas farblich no korrekt dargestellt....
Stehe gerade voll en el Schlauch... Kann me hier alguien en el Sprünge helfen ??? |
|
|
| |
|
|
|
RudiB. | ach......, el wichtigste vergessen....el Aufsplittung el Befehlszeilen con Backslash se natürlich, como en el unteren Listing, beibehalten voluntad. |
|
|
| |
|
|
|
RudiB. | Es mein Intento (LISTING) el problema a lösen...
cls
Declarar zeile$,x%,pos%,pos2%,new_zeile$,next_zeile$,org_zeile$,End_kommentar$,kom%,array$[]
Declarar Zeit&,Expediente$
Datei$=Loadfile$("ÖFFNE:","*.prf")
Zeit&=&gettickcount
Asignar #1,Expediente$
reset #1
Imprimir "Working.....Please Wait"
Sinestar encargado EOF(#1)
input #1,zeile$
Org_Zeile$=Línea$
'-----------------------------------------------------------------------------------------------------------------------
' Ganzzeilige Kommentare y Blockkommentare en Leerzeilen wandeln
'-----------------------------------------------------------------------------------------------------------------------
If (Left$(Trim$(Línea$),1)="'") Or (Left$(Trim$(Línea$),2)="//")
Línea$=""
Imprimir Org_zeile$
continue
EndIf
If Left$(Línea$,2)="/*"
Imprimir Org_zeile$
kom%=1
continue
EndIf
If Left$(Línea$,2)="*/"
Imprimir Org_zeile$
kom%=0
continue
EndIf
If kom%=1
Línea$=""
Imprimir Org_zeile$
continue
EndIf
'-----------------------------------------------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------------------------------------------
' Doppelpunkte en Cuerdas umwandeln
'-----------------------------------------------------------------------------------------------------------------------
Caso negativo right$(trim$(Línea$),1)=chr$(92)
If instr(chr$(58),Línea$)
pos%=0
Whileloop Len(Línea$)
If mid$(Línea$,&bucle,1)=chr$(34)
pos%=Not(pos%)
EndIf
If (pos%=1) And (mid$(Línea$,&bucle,1)=Chr$(58))
New_Zeile$=New_Zeile$+chr$(247)
Más
new_Zeile$=new_Zeile$+mid$(Línea$,&bucle,1)
EndIf
EndWhile
If pos%=1
Línea$=Translate$(Línea$,chr$(58),chr$(247))
Más
Línea$=New_Zeile$
new_zeile$=""
Endif
EndIf
Endif
'-----------------------------------------------------------------------------------------------------------------------
' Endkommentare abschneiden
'-----------------------------------------------------------------------------------------------------------------------
If (Instr("'",Trim$(Línea$),2)) Or (Instr("//",Trim$(Línea$),2))
pos%=0
End_kommentar$=""
Whileloop Len(Línea$)
If mid$(Línea$,&bucle,1)=chr$(34)
pos%=Not(pos%)
EndIf
If (mid$(Línea$,&bucle,1)="'") And (pos%=0)
End_kommentar$=Right$(Línea$,Len(Línea$)-&bucle+1)
Línea$=Left$(Línea$,&bucle-1)
Romper
EndIf
If (mid$(Línea$,&bucle,2)="//") And (pos%=0)
End_kommentar$=Right$(Línea$,Len(Línea$)-&bucle+1)
Línea$=Left$(Línea$,&bucle-1)
Romper
EndIf
EndWhile
EndIf
'-----------------------------------------------------------------------------------------------------------------------
' Doppelpunkt Befehlszeilen-Trennung
'-----------------------------------------------------------------------------------------------------------------------
Caso negativo right$(trim$(Línea$),1)=chr$(92)
If Instr(":",Línea$)
pos%=0
pos2%=1
new_zeile$=""
Mientras que 1
Pos%=Instr(":",Línea$,pos2%)
If pos%=0
Romper
EndIf
If right$(Línea$,1)=":"'Sprungmarker
romper
EndIf
If (Left$(Trim$(lower$(Línea$)),5)="case ") or (Left$(Trim$(lower$(Línea$)),8)="casenot ")
Pos2%=Instr(":",Línea$,pos%+1)
If pos2%=0
Romper
EndIf
EndIf
new_Zeile$=Left$(Línea$,pos%-1)
new_Zeile$=Translate$(new_Zeile$,chr$(247),chr$(58))
Imprimir new_zeile$
new_Zeile$=""
Línea$=right$(Línea$,Len(Línea$)-pos%)
EndWhile
EndIf
Endif
Línea$=Translate$(Línea$,chr$(247),chr$(58))
Imprimir zeile$+" "+End_kommentar$
End_kommentar$=""
new_zeile$=" "
EndWhile
Cerrar #1
Imprimir &gettickcount-Zeit&
Imprimir "FERTIG"
Waitinput
|
|
|
| |
|
|
|
Walter | Hier una erster Ansatz, el simplemente feststellt, si uno se en una Doppelpunkt innerhalb uno Cuerdas befindet oder no. Bzgl. Case muss sólo todavía geklärt voluntad, si sólo el erste Doppelpunkt danach bleiben se o. cómo con más verfährt.
'## Kommentarzeilen son hier no berücksichtigt
'## caso es hier todavía no berücksichtigt
cls
Declarar Expediente$
declarar StringAn%,i%,en$,out$,a$[]
StringAn%=0' 0=Außerhalb uno Cuerdas, 1=Innerhalb uno Cuerdas
Datei$=Loadfile$("ÖFFNE:","*.prf")
Asignar #1,Expediente$
reset #1
Imprimir "Working.....Please Wait"
Sinestar encargado EOF(#1)
input #1,en$
a$[]=explode(en$)' Signo el Línea en una Array escribir
'Alle Signo el Línea durchlaufen
for i%,len(en$)
' Feststellen, si uno se innerhalb uno Cuerdas befindet
caso a$[i%-1]=Chr$(34) and StringAn%=0:StringAn%=1
caso a$[i%-1]=Chr$(34) and StringAn%=1:StringAn%=0
if a$[i%-1]=":"
If StringAn%=0' : es no innerhalb uno Cuerdas - Línea teilen
imprimir out$
out$=""
más
out$=out$+a$[i%-1]' : es innerhalb uno Cuerdas - Línea fortsetzen
endif
más
out$=out$+a$[i%-1]
endif
endfor
imprimir out$
out$=""
EndWhile
Cerrar #1
Imprimir "FERTIG"
waitinput
|
|
|
| |
|
|
|
RudiB. | ¡Hola Walter,
...schön el todavía alguien en dieses Thema antwortet.
Su Ansatz es sí correcto, doch el Diablo steckt sí en el Detalle... Wenn Yo z.B.: Un Programmzeile el una String beinhaltet, aber entonces con un Backslash en mehrere Zeilen aufgeteilt se. siehe hier....
hier haperst entonces gewaltig...
Yo weiß ya una solución a mein Problema en el allgemeinen, sin embargo sería Me gusta auch una solución dafür encontrar, si yo una Expediente Zeilenweise einlese .... Lo son auch esta una solución .... hier debería entonces aber jede Línea por mehrere Abfragen laufen, qué natürlich muy viel Tiempo kostet.....
Yo eben gehofft, alguien ha un despertar Concepto, en el Yo no komme...
Saludo de München Rudi |
|
|
| |
|
|
|
Walter | Mein Programmstück kommt con su Code
aber bestens zurecht... |
|
|
| |
|
|
|
Walter | Sorry - ya gesehen. Schau Yo más a... |
|
|
| |
|
|
|
RudiB. | DANKE... |
|
|
| |
|
|
|
Walter | Bähhh - war sólo una kleiner Fehler drin... Jetzt va el!
|
|
|
| |
|
|
|
RudiB. | Yo arbeite en efecto dran.... aber scheinbar seh Yo, el Wald antes lauter Bäumen no.... oft es así simplemente...tener Yo ya así oft hier en el Foro erlebt... |
|
|
| |
|
|
|
RudiB. | wow....kurz probiert con el Test-Listing, como hast Usted ahora el gemacht???? ..muss Su código veces anschauen... |
|
|
| |
|
|
|
Walter | Hier nun samt caso / caseNot: Dabei tener Yo mich daran mantenido, dass normalerweise todos auf caso folgenden Befehle en derselben Línea en true abgearbeitet voluntad, während en falso inmediatamente en el nächste Línea gesprungen se. (Aus el Ayuda: Case N : BEF Sombrero el Ausdruck N una Valor <> 0, se BEF ausgeführt, ansonsten va el Programmausführung en el nächste Línea...)
' Das Codestück teilt Befehlszeilen en ":" en neue Zeilen en,
' außer
' a) el ":" befindet se innerhalb uno Stringliterals; oder
' b) en caso/caseNot. Hier bleiben todos ":" en derselben Línea _nach_ una
' caso/caseNot obtener (allerdings bisher todavía sin Berücksichtigung de
' Umbrüchen langer Codezeilen)
' Kommentarzeilen son no berücksichtigt;
' el necesario ggf vorher ausgeschieden voluntad
cls
Declarar Expediente$
declarar StringAn%,i%,en$,out$,a$[]
declarar caseAn%,pos%
StringAn%=0
CaseAn%=0
Datei$=Loadfile$("ÖFFNE:","*.prf")
Asignar #1,Expediente$
reset #1
Imprimir "Working.....Please Wait"
Sinestar encargado EOF(#1)
input #1,en$
a$[]=explode(en$)' Signo el Línea en Array escribir
' Falls caso oder caseNot drin: Position determinar
pos%=instr("case ",lower$(en$))
caso pos%=0:pos%=instr("casenot ",lower$(en$))
if pos%=0' KEIN caso drin
'Alle Signo el Línea durchlaufen
for i%,len(en$)
' Feststellen, si uno se innerhalb uno Cuerdas befindet
if (a$[i%-1]=Chr$(34)) and (StringAn%=0)#
StringAn%=1
elseif (a$[i%-1]=Chr$(34)) and (StringAn%=1)
StringAn%=0
endif
if a$[i%-1]=":"
If StringAn%=0' : es no innerhalb uno Cuerdas - Línea teilen
imprimir out$
out$=""
más
out$=out$+a$[i%-1]' : es innerhalb uno Cuerdas - Línea fortsetzen
endif
más
out$=out$+a$[i%-1]' más Signo como :
endif
endfor
más' caso o caseNot drin
'Alle Signo el Línea a a caso durchlaufen
for i%,pos%-1
' Feststellen, si uno se innerhalb uno Cuerdas befindet
if (a$[i%-1]=Chr$(34)) and (StringAn%=0)
StringAn%=1
elseif (a$[i%-1]=Chr$(34)) and (StringAn%=1)
StringAn%=0
endif
if a$[i%-1]=":"
If StringAn%=0' : es no innerhalb uno Cuerdas - Línea teilen
imprimir out$
out$=""
más
out$=out$+a$[i%-1]' : es innerhalb uno Cuerdas - Línea fortsetzen
endif
más
out$=out$+a$[i%-1]' una más Signo como :
endif
endfor
endif
if pos%>0
' Rest el caso-Línea en un neue Línea escribir
imprimir mid$(en$,pos%,len(en$)-pos%+1)
más
imprimir out$
out$=""
endif
EndWhile
Cerrar #1
Imprimir "FERTIG"
waitinput
Gerne nachfragen, sofern el Kommentare no ausreichen. Fehler son natürlich posible... |
|
|
| |
|
|