| |
|
|
RudiB. | allô zusammen,
je stehe wohl à einer pour mich schier unlösbaren devoir. je voudrais un Programme-Listing avec Befehlszeilentrennung par Doppelpunkte, aufsplitten dans separate Programmzeilen. comme Sonderfall soll cependant une la ligne avec "Case" ou bien "CaseNot" beibehalten volonté.
ici la fois un absolu Sinnfreies Listing et après cela Listing bereinigt.
...et so solls ensuite air.....quoi je absolu pas hinkriege !!!!
....z.B: alleine déjà qui String dans VAR a$ avec einem Doppelpunkt y est un Herausforderung dar...weil ici aussi encore qui eigentliche Befehlszeile avec einem Backslash aufgesplittet wird...
aussi ici im Forum wird cela erste Listing avec den Cordes farblich pas korrekt dargestellt....
Stehe justement voll sur dem Schlauch... peux mir ici quelqu'un sur qui Sprünge aider ??? |
|
|
| |
|
|
|
RudiB. | ah......, cela wichtigste oublier qc....qui Aufsplittung qui Befehlszeilen avec Backslash soll naturellement, comment im unteren Listing, beibehalten volonté. |
|
|
| |
|
|
|
RudiB. | c'est mon Versuch (LISTING) cela Problem trop lösen...
cls
Déclarer la ligne$,x%,pos%,pos2%,new_zeile$,next_zeile$,org_zeile$,End_kommentar$,kom%,array$[]
Déclarer Zeit&,Dossier$
Datei$=Loadfile$("ÖFFNE:","*.prf")
Zeit&=&gettickcount
Assign #1,Dossier$
reset #1
Imprimer "Working.....Please Wait"
WhileNot EOF(#1)
input #1,la ligne$
Org_Zeile$=la ligne$
'-----------------------------------------------------------------------------------------------------------------------
' Ganzzeilige Kommentare et Blockkommentare dans Leerzeilen wandeln
'-----------------------------------------------------------------------------------------------------------------------
Si (Left $(Trim$(la ligne$),1)="'") Or (Left $(Trim$(la ligne$),2)="//")
la ligne$=»
Imprimer Org_zeile$
continue
EndIf
Si Left $(la ligne$,2)="/*"
Imprimer Org_zeile$
kom%=1
continue
EndIf
Si Left $(la ligne$,2)="*/"
Imprimer Org_zeile$
kom%=0
continue
EndIf
Si kom%=1
la ligne$=»
Imprimer Org_zeile$
continue
EndIf
'-----------------------------------------------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------------------------------------------
' Doppelpunkte dans Cordes transformer
'-----------------------------------------------------------------------------------------------------------------------
Si non right$($ Trim(la ligne$),1)=chr$(92)
Si instr(chr$(58),la ligne$)
pos%=0
Whileloop Len(la ligne$)
Si mid$(la ligne$,&loop,1)=chr$(34)
pos%=Not(pos%)
EndIf
Si (pos%=1) And (mid$(la ligne$,&loop,1)=Chr$(58))
New_Zeile$=New_Zeile$+chr$(247)
D'autre
new_Zeile$=new_Zeile$+mid$(la ligne$,&loop,1)
EndIf
Endwhile
Si pos%=1
la ligne$=Translate$(la ligne$,chr$(58),chr$(247))
D'autre
la ligne$=New_Zeile$
new_zeile$=»
Endif
EndIf
Endif
'-----------------------------------------------------------------------------------------------------------------------
' Endkommentare couper
'-----------------------------------------------------------------------------------------------------------------------
Si (Instr("'",Trim$(la ligne$),2)) Or (Instr("//",Trim$(la ligne$),2))
pos%=0
End_kommentar$=»
Whileloop Len(la ligne$)
Si mid$(la ligne$,&loop,1)=chr$(34)
pos%=Not(pos%)
EndIf
Si (mid$(la ligne$,&loop,1)="'") And (pos%=0)
End_kommentar$=Right$(la ligne$,Len(la ligne$)-&loop+1)
la ligne$=Left $(la ligne$,&loop-1)
Pause
EndIf
Si (mid$(la ligne$,&loop,2)="//") And (pos%=0)
End_kommentar$=Right$(la ligne$,Len(la ligne$)-&loop+1)
la ligne$=Left $(la ligne$,&loop-1)
Pause
EndIf
Endwhile
EndIf
'-----------------------------------------------------------------------------------------------------------------------
' Doppelpunkt Befehlszeilen-Trennung
'-----------------------------------------------------------------------------------------------------------------------
Si non right$($ Trim(la ligne$),1)=chr$(92)
Si Instr(»,la ligne$)
pos%=0
pos2%=1
new_zeile$=»
Tandis que 1
Pos%=Instr(»,la ligne$,pos2%)
Si pos%=0
Pause
EndIf
Si right$(la ligne$,1)=»'Sprungmarker
pause
EndIf
Si (Left $(Trim$(lower$(la ligne$)),5)="case ") or (Left $(Trim$(lower$(la ligne$)),8)="casenot ")
Pos2%=Instr(»,la ligne$,pos%+1)
Si pos2%=0
Pause
EndIf
EndIf
new_Zeile$=Left $(la ligne$,pos%-1)
new_Zeile$=Translate$(new_Zeile$,chr$(247),chr$(58))
Imprimer new_zeile$
new_Zeile$=»
la ligne$=right$(la ligne$,Len(la ligne$)-pos%)
Endwhile
EndIf
Endif
la ligne$=Translate$(la ligne$,chr$(247),chr$(58))
Imprimer la ligne$+" "+End_kommentar$
End_kommentar$=»
new_zeile$=" "
Endwhile
Fermer #1
Imprimer &gettickcount-Zeit&
Imprimer "FERTIG"
Waitinput
|
|
|
| |
|
|
|
Walter | ici un erster Ansatz, qui simple feststellt, si on sich chez einem Doppelpunkt dedans eines Cordes est ou bien pas. Bzgl. Cas muss seulement encore geklärt volonté, si seulement qui erste Doppelpunkt après rester soll bzw. comment on avec weiteren verfährt.
'## Kommentarzeilen sommes ici pas berücksichtigt
'## cas ist ici encore pas berücksichtigt
cls
Déclarer Dossier$
declare StringAn%,i%,dans$,out$,a$[]
StringAn%=0' 0=Außerhalb eines Cordes, 1=Innerhalb eines Cordes
Datei$=Loadfile$("ÖFFNE:","*.prf")
Assign #1,Dossier$
reset #1
Imprimer "Working.....Please Wait"
WhileNot EOF(#1)
input #1,dans$
a$[]=explode(dans$)' marque qui la ligne dans un Array écrivons
'Alle marque qui la ligne durchlaufen
for i%,len(dans$)
' Feststellen, si on sich dedans eines Cordes est
cas a$[i%-1]=Chr$(34) and StringAn%=0:StringAn%=1
cas a$[i%-1]=Chr$(34) and StringAn%=1:StringAn%=0
si a$[i%-1]=»
Si StringAn%=0' : ist pas dedans eines Cordes - la ligne partager
imprimer out$
out$=»
d'autre
out$=out$+a$[i%-1]' : ist dedans eines Cordes - la ligne continuer
endif
d'autre
out$=out$+a$[i%-1]
endif
endfor
imprimer out$
out$=»
Endwhile
Fermer #1
Imprimer "FERTIG"
waitinput
|
|
|
| |
|
|
|
RudiB. | allô Walter,
...joli cela doch encore quelqu'un sur cet Thema antwortet.
Dein Ansatz ist oui richtig, doch qui Teufel steckt oui im Detail... si je z.B.: une Programmzeile qui une String beinhaltet, mais ensuite avec einem Backslash sur plusieurs Zeilen aufgeteilt wird. siehe ici....
ici haperst ensuite gewaltig...
je sais déjà une Solution pour mon Problem im allgemeinen, cependant serait je volontiers aussi une Solution pour trouver, si je une Dossier Zeilenweise einlese .... il y a aussi hierfür une Solution .... ici devrait ensuite mais chacun la ligne par plusieurs Abfragen courir, quoi naturellement très viel Zeit kostet.....
je hab plan gehofft, quelqu'un hat une allumage concept, sur qui je pas viens...
Salut aus München Rudi |
|
|
| |
|
|
|
Walter | mon Programmstück venez avec Deinem Code
mais bestens zurecht... |
|
|
| |
|
|
|
Walter | Sorry - déjà gesehen. exposition je mir plus à... |
|
|
| |
|
|
|
RudiB. | DANKE... |
|
|
| |
|
|
|
Walter | Bähhh - était seulement un kleiner faute drin... maintenant allez cela!
|
|
|
| |
|
|
|
RudiB. | je travaille oui aussi tour.... mais scheinbar seh Je l' forêt avant lauter Bäumen pas.... souvent ist es so simple...hab je déjà so souvent ici im Forum erlebt... |
|
|
| |
|
|
|
RudiB. | wow....kurz probiert avec dem Test-Listing, comment la hâte Du maintenant cela gemacht???? ..muss Deinen Code la fois anschauen... |
|
|
| |
|
|
|
Walter | ici eh bien velours cas / caseNot: Dabei hab je mich daran gehalten, dass normalement alle auf cas folgenden Befehle dans derselben la ligne chez vrai abgearbeitet volonté, au cours de chez faux tout de suite dans qui prochain la ligne gesprungen wird. (Aus qui Aider: Cas N : BEF Hat qui Ausdruck N une Wert <> 0, wird BEF fonctionnement, ansonsten allez qui Programmausführung dans qui prochain la ligne...)
' cela Codestück teilt Befehlszeilen chez ":" dans neue Zeilen sur,
' sauf
' a) qui ":" est sich dedans eines Stringliterals; ou bien
' b) chez cas/caseNot. ici rester alle ":" dans derselben la ligne _nach_ einem
' cas/caseNot conservé (allerdings bisher encore sans Berücksichtigung de
' Umbrüchen long Codezeilen)
' Kommentarzeilen sommes pas berücksichtigt;
' qui doit ggf auparavant ausgeschieden volonté
cls
Déclarer Dossier$
declare StringAn%,i%,dans$,out$,a$[]
declare caseAn%,pos%
StringAn%=0
CaseAn%=0
Datei$=Loadfile$("ÖFFNE:","*.prf")
Assign #1,Dossier$
reset #1
Imprimer "Working.....Please Wait"
WhileNot EOF(#1)
input #1,dans$
a$[]=explode(dans$)' marque qui la ligne dans Array écrivons
' si cas ou bien caseNot drin: Position feststellen
pos%=instr("case ",lower$(dans$))
cas pos%=0:pos%=instr("casenot ",lower$(dans$))
si pos%=0' KEIN cas drin
'Alle marque qui la ligne durchlaufen
for i%,len(dans$)
' Feststellen, si on sich dedans eines Cordes est
si (a$[i%-1]=Chr$(34)) and (StringAn%=0)#
StringAn%=1
elseif (a$[i%-1]=Chr$(34)) and (StringAn%=1)
StringAn%=0
endif
si a$[i%-1]=»
Si StringAn%=0' : ist pas dedans eines Cordes - la ligne partager
imprimer out$
out$=»
d'autre
out$=out$+a$[i%-1]' : ist dedans eines Cordes - la ligne continuer
endif
d'autre
out$=out$+a$[i%-1]' d'autre marque comme :
endif
endfor
d'autre' cas bzw caseNot drin
'Alle marque qui la ligne jusque cas durchlaufen
for i%,pos%-1
' Feststellen, si on sich dedans eines Cordes est
si (a$[i%-1]=Chr$(34)) and (StringAn%=0)
StringAn%=1
elseif (a$[i%-1]=Chr$(34)) and (StringAn%=1)
StringAn%=0
endif
si a$[i%-1]=»
Si StringAn%=0' : ist pas dedans eines Cordes - la ligne partager
imprimer out$
out$=»
d'autre
out$=out$+a$[i%-1]' : ist dedans eines Cordes - la ligne continuer
endif
d'autre
out$=out$+a$[i%-1]' un d'autre marque comme :
endif
endfor
endif
si pos%>0
' reste qui cas-la ligne dans un neue la ligne écrivons
imprimer mid$(dans$,pos%,len(dans$)-pos%+1)
d'autre
imprimer out$
out$=»
endif
Endwhile
Fermer #1
Imprimer "FERTIG"
waitinput
Gerne informer, sofern qui Kommentare pas ausreichen. faute sommes naturellement possible... |
|
|
| |
|
|