also falls jemand dast tool braucht, der kann mir schreiben.
Hmm.
also falls jemand dast tool braucht, der kann mir schreiben.
Hmm.
Das Problem mit dem von dir geposteten Problem-PDF war wohl die Art, wie du es erstellt hast (als Bilddatei?). Ich musste erst einmal OCR in einem PDF Editor drüber laufen lassen, bevor es geklappt hat..
Wenn das alles eigentlich kein Problem für dich ist, dann mach es eben manuell und benenne die Datei dabei eben auch gleich selbst.
Bisher alles so weit so gut.
Jedoch wenn die PDF nun zb 2 Seiten hat dann erstellt er mir daraus auch 2 PDF´s...obwohl der PRINTER-Befehl erst am ende kommt....warum weiß erstmal niemand^^...
Es wird also einmal PDFCreator.pdf mit dem Anfang und dann noch einmal PDFCreator.pdf mit dem Ende erstellt?
Wenn das so ist, könnte man die Dateien doch Artikelnummer.pdf und Artikelnummer_2.pdf nennen, oder?
Das könnte man einmal automatisieren, wenn das Skript die Dateien verschiebt und dabei nur durchnummeriert und man am Ende mit einem zweiten Skript über das Verzeichnis geht und jede Datei ohne erwarteten Kopf, wie etwa Artikel der vorherigen zuordnet.
Oder das Skript schreibt bei jedem Aufruf, die aktuelle Datei in eine Textdatei. Wenn der erwartete Textteil für einen Anfang nicht in der aktuellen PDF ist, wird eben die vorherige Artikelnummer aus der Textdatei ausgelesen und mit Nummerierung gespeichert..
Mit noch etwas Arbeit könnte man sicher auch eine zusammenhängende PDF erstellen.
Hallo @Sascha123456,
das eigentliche Problem scheint mir eigentlich die Automatisierung der Erstellung der richtigen PDF Dateien. Also jeden Bericht komplett in einer Datei zu haben. Das Umbenennen sollte dann auch noch klappen. (Wenn du selbst schon die Dateien zusammen friemeln musst, kannst du sie auch selbst benennen.)
Macht es vllt. Sinn, alle Dateien erst einmal fortlaufend zu benennen und sie später in einem weiteren Durchlauf nach den richtigen Inhalten aufzuteilen und in mit Artikelnummer zu benennen?
Hi Leute,
ich würde euch davon abraten dieses Fass überhaupt auf zumachen.
Das erinnert mich an das Kruzifix Urteil. Es gab nie eine Diskussion über Kreuze an der Wand in Klassenzimmern. Erst als die CSU das mal in eine Verordnung gegossen hat, um sich besonders Werte treu zu zeigen, gab es Probleme.
Die Mods könnten das ja wissen: Wie viele Löschanträge gab es aufgrund von Urheberrechtsbeanstandungen in diesem Forum bisher? Habt ihr schon einmal von jemandem gehört, der mit AutoIt ein Programm geschrieben hat und einem ursprünglichen Urheber kam eine Funktion bekannt vor und er dachte sich, das ist doch mit AutoIt geschrieben und hat das Programm dann entpackt (anderes Problem) und dann den Rechtsweg eingeschlagen, um den Programm-Autor zur Rechenschaft zu ziehen?
Solange bis auf eine Frage danach noch nie etwas aufgefallen ist, würde ich bei der bewährten Praxis bleiben.
Hallo @Musashi,
eine schöne und interessante Vorstellung. Bei deinem Weg kannst du sicher gute Beiträge leisten. Bis dahin.
Hallo @Sascha123456,
Ich kann das nicht nachvollziehen:
und zwar funktioniert alles tadelos solange die PDF nur eine Seite lang ist.
Jedoch wenn diese 2 Seiten lang wird, dann speichert er mir die PDF´s als jede einzeln ab..? Das ist natürlich ein Problem, er soll diese als eine PDF mit 2 oder 3 Seiten lassen.
Eine zweiseitige PDF bleibt zweiseitig und eine zehnseitige PDF bleibt zehnseitig. Schau dir mal den Code an:
Die Datei wird einfach verschoben. Das andere ist nur zum Extrahieren des Namens und verändert die vorhandene PDFCreator.pdf überhaupt nicht. Daher würde ich nicht davon sprechen, es bei zwei oder drei Seiten zu lassen, sondern wie fügt man die zusammen?
Ich kann mir nur vorstellen, dass dein Druckprozess jede Seite als einzelne Datei erstellt oder PDFCreate selbst immer eine Seite schreibt oder bei Bedarf an ein Dokument anhängt, aber nach jedem Durchlauf das Skript ausgeführt wird.
.. Das ist alles nur Mutmaßung. Kannst du es vielleicht noch einmal genauer erklären?
Schöne Feiertage
Hi @Bitnugger
Jaja, das war einfach Mist. Du ahnst auch woher das kommt.
Kein Thema @Mikki,
Ich habe in Zeile 7 die MsgBox entfernt und in Zeile 9 _ArrayDisplay entfernt.
Gut so! Die beiden Zeilen sollten dich ja auch nicht dauerhaft gängeln, sondern den Unterschied zwischen einem und mehreren Elementen aufzeigen
Nicht zu danken @Cybercommander,
Nachdem du hundert Euro gespendet hast, bist du super cool geblieben. Ich hab mich erst einmal erschreckt.
Oh sorry, dann knick das mit dem Event.
Ergänze einfach mal bevor du mit Body arbeiten willst, ob es ein Objekt ist. Wenn nicht, dann eben Fehler.
$test = _HTML_StripTags("<h2></h2>")
;~ $test = _HTML_StripTags("<html><h2>sdfsd73428/D8ajhehfrwljk27//<>>>A< sdfsdf sdf sdf sdf</h2></html>")
MsgBox(0, @error, $test)
Func _HTML_StripTags($sHTMLData) ; http://www.autoitscript.com/forum/topic/...tml-data/page__view__findpost_
If $sHTMLData = "" Then Return SetError(1, 0, $sHTMLData)
Local $oHTML = ObjCreate("HTMLFILE")
If @error Then Return SetError(1, 0, $sHTMLData)
$oHTML.Open()
$oHTML.Write($sHTMLData)
If IsObj($oHTML.Body) Then
Return SetError(0, 0, $oHTML.Body.InnerText)
Else
Return SetError(1, 0, $sHTMLData)
EndIf
EndFunc ;==>_HTML_StripTags
Alles anzeigen
Hallo @Cybercommander,
Du willst den Fehler nur abfangen, damit das Skript nicht abstürzt? Das ist kein Problem.
#include <file.au3>
#include <Array.au3>
#Include <String.au3>
#Include <Date.au3>
#include <MsgBoxConstants.au3>
#include <Math.au3>
test()
Func test()
Local $sHTMLData = "<h2></h2>"
_HTML_StripTags($sHTMLData)
If @error Then MsgBox(0, "Fehler: " & @error, $sHTMLData)
EndFunc
Func _HTML_StripTags($sHTMLData) ; http://www.autoitscript.com/forum/topic/...tml-data/page__view__findpost_
If $sHTMLData = "" Then Return SetError(1, 0, $sHTMLData)
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
Local $oHTML = ObjCreate("HTMLFILE")
If @error Then Return SetError(1, 0, $sHTMLData)
Local $oIEEvents = ObjEvent($oHTML, "_$oHTML_Event", "")
If @error Then Return SetError(2, 0, $sHTMLData)
$oHTML.Open()
$oHTML.Write($sHTMLData)
Return SetError(0, 0, $oHTML.Body.InnerText)
EndFunc ;==>_HTML_StripTags
Func _ErrFunc($oError)
; Do anything here.
ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
Return SetError(1, 0, "COM Error intercepted")
EndFunc ;==>_ErrFunc
Alles anzeigen
@Gun-Food wird sich freuen. Der PayPal Button ist auf der Startseite.
Hallo @Mikki,
ich habe es mal ausprobiert. Dir hat natürlich noch komplett die Schleife gefehlt - das weißt du ja aber selbst. Hattest du außerdem Probleme mit der Ausgabe von FileOpenDialog? Ich meine vielleicht hast du es in der Hilfe übersehen und dir die Ausgabe von mehreren Dateien nie angeschaut?
Zitat von Success von FileOpenDialogthe full path of the file(s) chosen. Results for multiple selections are "Directory|file1|file2|...".
Das heißt, deine gewählte Methode funktioniert nicht immer, da die Datengrundlage jeweils eine andere ist. Ich habe mal deine Daten_uebernehmen() etwas abgewandelt. In den ersten Zeilen gibt es eine MsgBox und ein _ArraySearch. Schau dir beides mit einer Datei und dann mit mehreren Dateien an. Da sollte es klar werden. Gut ist das wohl nicht, was ich da geändert habe, aber ich hoffe mal, es ist für dich verständlich.
Func Daten_uebernehmen()
$oExcel = _Excel_Open(Default, Default, Default, Default, True)
$oWorkbook = _Excel_BookNew($oExcel, 1)
MsgBox(0,"$sFileOpenDialog_Plaene Ausgabe", $sFileOpenDialog_Plaene)
Local $aSplit = StringSplit($sFileOpenDialog_Plaene, "|") ; Am Pipezeichen trennen
_ArrayDisplay($aSplit, "$sFileOpenDialog_Plaene nach Split")
Local $iMaxSize ; Dient als Zähler für die max. Schleifendurchläufe.
If $aSplit[0] = 1 Then ; In $aSplit[0] siehst du die Anzahl, der Elemente. Wenn nur eine Datei, dann soll die Schleife dennoch laufen..
$iMaxSize = 2 ; .. Also setzen ich den Inhalt auf zwei.
Else
$iMaxSize = $aSplit[0] ; Ansonsten auf den Wert $aSplit[0] (denn in Element 0 steht ja Anzahl, in 1 Dateipfad, in 2 die erste Datei, ..)
EndIf
For $i = 2 To $iMaxSize ; Schleife von 2 bis maximaler Anzahl. (Zwei, weil bei mehreren Dateien, die erste Datei in Element 2 steht. Siehe _ArrayDisplay).
If $aSplit[0] = 1 Then
$sFileFullname = StringTrimLeft($aSplit[1], StringInStr($aSplit[1], "\", 0, -1)) ; Schnippelt den Dateipfad weg. Etwas obskur, aber schau mal in die Hilfe zu beiden Befehlen.
$sFileName = StringLeft($sFileFullname, StringInStr($sFileFullname, ".", 0, -1) - 1) ; Schnippelt die Dateiendung ab.
Else
$sFileName = StringLeft($aSplit[$i], StringInStr($aSplit[$i], ".", 0, -1) - 1) ; Wenn mehr als eine Datei, dann muss ja nur die Endung abgeschnippelt werden.
EndIf
$String_Replace_Plannummer_1 = StringLeft($sFileName, 6)
$String_Replace_Benennung_1 = StringTrimLeft($sFileName, 7)
$Date = _NowDate()
$Index = 0
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $String_Replace_Plannummer_1, "A" & $i - 1) ; $i-1, weil $i ja schon zu Beginn 2 ist, der Start aber in Zeile 1 stattfinden soll.
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $String_Replace_Benennung_1, "B" & $i - 1)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $Date, "C" & $i - 1)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $Index, "D" & $i - 1)
Next
EndFunc ;==>Daten_uebernehmen
Alles anzeigen
Hey @NO1 :-),
Ich skripte jetzt schon ein ganzes Jahr in AutoIt und mir ist das mit = True und der Variablendelaration bewusst. Wenn ich jetzt ein Skript nicht als UDF oder nicht für die Community schreib, dann komm ich mit den Bezeichnungen aber ziemlich gut zurecht.
Ja, da verlangt einer von dir, überall nochmal nachzubessern. Geht's noch?!?
Es könnte in künftigen Skripten wenigstens nicht schaden, sich bei der Variablenbenennung an nachvollziehbare Regeln zu halten.
Du solltest die Antworten nicht überfliegen. Er sprach nicht davon warum man StringInStr benutzt wird, sondern warum du die Abfrage = True dahinter noch hast.
Das stimmt zu meiner Schande nicht ganz @alpines.
Ich hatte StringInStr und das "= True" in Zweifel gezogen. StringInStr scheint schon richtig zu sein. Der "= True"-Vergleich ist aber wie du schreibst nicht falsch aber unnötig.
Zu deiner Aussage "Warum StringInStr benutzen": Es kann ja sein, dass durch FileGetAttrib mehrere Attribute zurückgegeben werden in einem String und dann muss man ja überprüfen, ob das Attribut "D" in dem String vorhanden ist...
Ah ja, ein Blick in die Hilfe hilft immer!
Bei meinen Versuchen, kam immer nur ein Buchstabe und ich habe das nicht weiter hinterfragt. Ich hoffe meine anderen Anmerkungen bringen dir wirklich etwas.
Hallo @NO1 :-),
Das Skript hat doch noch einige Schwächen. Ein paar Dinge haben mir gar nicht gefallen (Schreib z.B. mal ConsoleWrite(0) in die erste Zeile deiner _IsDir- Funktion und klicke ein Item an...). Ganz schlimm finde ich:
Schmeiß das unbedingt raus! Das kann dir ständig in alles hineinhacken. Du wertest mit WM_NOTIFY doch schon Klicks aus. Mach das auch für Doppelklicks. Schau dir am Besten mal die Hilfe etwa zu "_GUICtrlListView_HitTest" an. Da findest du im Grunde eine fertige Lösung für dieses und andere Szenarien.
So hab ich die WM_NOTIFY-Funktion für dein Skript genutzt. ($ListviewDoubleclicked ist dann überflüssig):
Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $Listview
If Not IsHWnd($Listview) Then $hWndListView = GUICtrlGetHandle($Listview)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK
_ListviewDoubleclick()
Case $NM_RCLICK
GUICtrlDelete($ContextMenu)
_SetContextMenu()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen
(Hier lösche ich explizit das Control (GUICtrlDelete($ContextMenu)))!
Darüber hinaus habe ich $ContextMenu zu einer globalen Variable gemacht.
Einige Hinweise:
- Statt: If StringInStr(FileGetAttrib($Path), "D") = True Then genügt If StringInStr(FileGetAttrib($Path), "D") Then
(Das Auswerten ("= True") ist unnötig, wenn du schon die Lösung zurückgibst (True/False)).
- Warum überhaupt eine StringInStr-Prüfung hier?
- Alle Variablen, die du außerhalb von Funktionen deklarierst sind Global - auch wenn du sie Local deklarierst (Dim würde ich ganz weglassen).
(Es wäre besser, das auch richtig zu benennen. Das diszipliniert mich wenigstens zu überlegen, ob ich das für die betreffende Variable wirklich brauche. Je größer ein Projekt, desto wahrscheinlicher wird es, dass du mal versehentlich in einer Funktion mit einer globalen Variable arbeitest..).
- Darüber hinaus möchte ich dir raten Namenskonventionen einzuhalten, die klar machen, um welchen Datentyp es sich bei der Variable handelt. Das erleichtert dir im Nachhinein (und Fremden, die sich deinen Code ansehen sollen) das Zurechtfinden ungemein. Schau dir bei Interesse folgende Seite an: https://www.autoitscript.com/wiki/Best_coding_practices
PS: Klingt jetzt alles sehr kritisch. Aber es ist nicht so böse gemeint und soll nicht heißen, dass das alles Mist wäre.
Hey Leute,
Ich schicke mir gerade mit einem Bekannten Übungsaufgaben hin und her. Da wollte ich gerne die Ergebnisse in der gleichen Datei, jedoch nicht sofort sichtbar, haben. HTML-Dateien mit Spoilern bieten sich da an. Dann habe ich ein kleines Tool gebastelt, dass mir etwas Schreibarbeit sparen sollte und diese Dateien erstellt. Es funktioniert so wie html. Man kapselt einfach seinen sichtbaren Text und seinen versteckten Text mit den entsprechenden Schlagworten und das Skript erstellt im Textdatei-Verzeichnis eine html-Datei, die direkt ausgeführt wird.
Das ist total plump und war für mich nun leider doch nicht das Richtige. Vielleicht kann das hier aber mal jemand nutzen. Im Anhang findet sich das Skript mit einer Beispieldatei. (Skript ausführen, Beispieldatei auswählen, fertig.).
Das Skript erstellt eine Config-Datei, in der man seine eigenen Schlagworte und Farben einstellen kann.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.15.0 (Beta)
Script Function:
Erstellt einfache html-Dateien aus mit Containern zum Verstecken con Code (Soll für Übungen dienen).
Elemente müssen in eine Textdatei geschrieben und gekapselt werden.
(Standardschlagworte: )
1-mal Titel (0TitelStart ... 0TitelEnde)
x-mal Textfelder mit einer Beschreibung und/oder Aufgabe. (0TextStart ... 0TextEnde)
x-mal Codefelder mit zu versteckendem Text oder Code. (0CodeStart ... 0CodeEnde)
x-mal Markierungen im Code. (0MarkierungStart ...0MarkierungEnde
#ce ----------------------------------------------------------------------------
#include <Array.au3>
$hIniFile = @ScriptDir & "\Übungen-Einstellungen.txt"
If Not FileExists($hIniFile) Then _IniWrite()
#Region Deklarationen
Global $sStartTitle = IniRead($hIniFile, "Einstellungen", "Startmarkierung für Titel", "0TitelStart")
Global $sEndTitle = IniRead($hIniFile, "Einstellungen", "Endmarkierung für Titel", "0TitelEnde")
Global $sStartText = IniRead($hIniFile, "Einstellungen", "Startmarkierung für Text", "0TextStart")
Global $sEndText = IniRead($hIniFile, "Einstellungen", "Endmarkierung für Text", "0TextEnde")
Global $sStartCode = IniRead($hIniFile, "Einstellungen", "Startmarkierung für Code", "0CodeStart")
Global $sEndCode = IniRead($hIniFile, "Einstellungen", "Endmarkierung für Code", "0CodeEnde")
Global $sStartMark = IniRead($hIniFile, "Einstellungen", "Startmarkierung für Markierungen", "0MarkierungStart")
Global $sEndMark = IniRead($hIniFile, "Einstellungen", "Endmarkierung für Markierungen", "0MarkierungEnde")
Global $WindowBKColor = IniRead($hIniFile, "Einstellungen", "Hintergrund-Farbe Fenster", "#E6E6E6")
Global $CodeBKColor = IniRead($hIniFile, "Einstellungen", "Hintergrund-Farbe Codefeld", "#FE9A2E")
Global $MarkBKColor = IniRead($hIniFile, "Einstellungen", "Hintergrund-Farbe Markierungen", "#FFFF00")
#EndRegion Deklarationen
Global $sFileOpenDialog = FileOpenDialog("Wähle die Übungsdatei aus", @ScriptDir & "\", "Textdatei (*.txt)", 1)
If @error Then Exit
Global $s_htmlFile = StringTrimRight($sFileOpenDialog, 3) & "html"
Global $aOrder = _ParseTestFile()
_Write_HTML()
ShellExecute($s_htmlFile)
Func _ParseTestFile()
Local $sString = FileRead($sFileOpenDialog)
Local $aTitle = StringRegExp($sString, '(?s)' & $sStartTitle & '(.*?)' & $sEndTitle, 1)
If @error Then
Exit MsgBox(0, 'Fehler-Abbruch', 'Titel konnte nicht gefunden werden.')
EndIf
StringReplace($aTitle[0], @LF, '')
If @extended > 3 Then Exit MsgBox(0, 'Fehler-Abbruch', 'Maximal dreizeiliger Titel erlaubt.')
Local $sTitle = StringReplace($aTitle[0], @CRLF, @LF)
StringReplace(StringLeft($sTitle, 2), @LF, '')
If @extended > 0 Then $sTitle = StringTrimLeft($sTitle, @extended)
StringReplace(StringRight($sTitle, 2), @LF, '')
If @extended > 0 Then $sTitle = StringTrimRight($sTitle, @extended)
$sTitle = StringReplace($sTitle, @LF, '<br>')
StringReplace($sString, $sStartCode, "")
$iCodeStart = @extended
StringReplace($sString, $sEndCode, "")
$iCodeEnd = @extended
If $iCodeStart <> $iCodeEnd Then Exit MsgBox(0, 'Fehler-Abbruch', 'Codefelder nicht ausbalanciert. (Immer Starten und Beenden.)')
StringReplace($sString, $sStartText, "")
$iTextStart = @extended
StringReplace($sString, $sEndText, "")
$iTextEnd = @extended
If $iTextStart <> $iTextEnd Then Exit MsgBox(0, 'Fehler-Abbruch', 'Textfelder nicht ausbalanciert.. (Immer Starten und Beenden.)')
Local $aText = StringRegExp($sString, '(?s)' & $sStartText & '(.*?)' & $sEndText, 3)
If Not @error Then
If UBound($aText) <> $iTextStart Then Exit MsgBox(0, 'Fehler-Abbruch', 'Textfelder nicht ausbalanciert. (Reihenfolge von Starten und Beenden stimmt nicht immer.)')
Else
MsgBox(0, 'Hinweis', 'Keine Textfelder gefunden.', 5)
EndIf
Local $aCode = StringRegExp($sString, '(?s)' & $sStartCode & '(.*?)' & $sEndCode, 3)
If Not @error Then
If UBound($aCode) <> $iCodeStart Then Exit MsgBox(0, 'Fehler-Abbruch', 'Codefelder nicht ausbalanciert. (Reihenfolge von Starten und Beenden stimmt nicht immer.)')
Else
MsgBox(0, 'Hinweis', 'Keine Codefelder gefunden.', 5)
EndIf
Local $iOldCodeStartPos = 1, $iOldTextStartPos = 1
Local $aTextTemp[$iTextStart + 1][3], $aCodeTemp[$iCodeStart][3]
$aTextTemp[0][0] = "Titel"
$aTextTemp[0][1] = 0
$aTextTemp[0][2] = $sTitle
For $i = 1 To $iTextEnd
$iTextStartPos = StringInStr($sString, $sStartText, 1, 1, $iOldTextStartPos)
If $iTextStartPos <> 0 Then
$aTextTemp[$i][0] = "Text"
$aTextTemp[$i][1] = $iTextStartPos
$aTextTemp[$i][2] = $aText[$i - 1]
EndIf
$iTextEndPos = StringInStr($sString, $sEndText, 1, 1, $iTextStartPos)
Local $sSub = StringTrimLeft(StringLeft($sString, $iTextEndPos), $iTextStartPos)
If StringInStr($sSub, $sStartCode) Or StringInStr($sSub, $sEndCode, 1) Then
Exit MsgBox(0, 'Fehler-Abbruch', 'Codefeld-Marker innerhalb eines Textfeldes gefunden!')
EndIf
$iOldTextStartPos = $iTextEndPos
Next
For $i = 1 To $iCodeEnd
$iCodeStartPos = StringInStr($sString, $sStartCode, 1, 1, $iOldCodeStartPos)
If $iCodeStartPos <> 0 Then
$aCodeTemp[$i - 1][0] = "Code"
$aCodeTemp[$i - 1][1] = $iCodeStartPos
$aCodeTemp[$i - 1][2] = $aCode[$i - 1]
EndIf
$iCodeEndPos = StringInStr($sString, $sEndCode, 1, 1, $iCodeStartPos)
Local $sSub = StringTrimLeft(StringLeft($sString, $iCodeEndPos), $iCodeStartPos)
If StringInStr($sSub, $sStartText) Or StringInStr($sSub, $sEndText, 1) Then
Exit MsgBox(0, 'Fehler-Abbruch', 'Textfeld-Marker innerhalb eines Codefeldes gefunden!')
EndIf
$iOldCodeStartPos = $iCodeEndPos
Next
_ArrayConcatenate($aTextTemp, $aCodeTemp)
_ArraySort($aTextTemp, 0, 1, 0, 1)
;~ _ArrayDisplay($aTextTemp)
Return $aTextTemp
EndFunc ;==>_ParseTestFile
Func _Write_HTML()
Local $sString = _HTML_head()
$sString &= _HTML_title()
For $i = 1 To UBound($aOrder) - 1
If $aOrder[$i][0] = "Text" Then
$sString &= _HTML_text($i)
Else
$sString &= _HTML_code($i)
EndIf
Next
$sString &= _HTML_footer()
Local $hFileOpen = FileOpen($s_htmlFile, 2)
If @error Then Exit MsgBox(0, 'Fehler-Abbruch', 'Beim Erstellen der Datei ist ein Fehler aufgetreten. Keine Schreibrechte?')
FileWrite($hFileOpen, $sString)
FileClose($hFileOpen)
EndFunc ;==>_Write_HTML
Func _HTML_head()
Local $sString = '<html>' & @LF
$sString &= ' <head>' & @LF
$sString &= ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">' & @LF
$sString &= ' <style type="text/css">' & @LF
$sString &= ' body {background-color: ' & $WindowBKColor & ';}' & @LF
$sString &= ' h1 {text-align: center;}' & @LF
$sString &= ' div {text-align: center;}' & @LF
$sString &= ' </style>' & @LF
$sString &= ' </head>' & @LF
$sString &= ' <body>' & @LF
Return $sString
EndFunc ;==>_HTML_head
Func _HTML_title()
Local $sString = ' <h1>' & $aOrder[0][2] & '</h1>' & @LF
$sString &= ' <br>' & @LF
Return $sString
EndFunc ;==>_HTML_title
Func _HTML_footer()
Local $sString = ' </body>' & @LF
$sString &= '</html>' & @LF
Return $sString
EndFunc ;==>_HTML_footer
Func _HTML_code($iIndex)
Local $sString = ' <div>' & @LF
$sString &= ' <button title="" type="button"' & @LF
$sString &= ' onclick="' & @LF
$sString &= " if(document.getElementById('spoiler" & $iIndex & "') .style.display=='none')" & @LF
$sString &= " {document.getElementById('spoiler" & $iIndex & "') .style.display=''}" & @LF
$sString &= " else{document.getElementById('spoiler" & $iIndex & "') .style.display='none'" & @LF
$sString &= ' }">Einblenden / Ausblenden</button>' & @LF
$sString &= ' </div>' & @LF
$sString &= ' <div id="spoiler' & $iIndex & '" style="display:none;' & @LF
$sString &= ' border: 2px black dashed;' & @LF
$sString &= ' margin: 20px;' & @LF
$sString &= ' padding: 5px;' & @LF
$sString &= ' text-align: left;' & @LF
$sString &= ' background-color: ' & $CodeBKColor & '">' & @LF
$sCodeString = StringReplace($aOrder[$iIndex][2], @CRLF, @LF)
$sCodeString = StringReplace($sCodeString, @TAB, " ")
Local $sMarkStyle = '<div style="background-color: ' & $MarkBKColor & '; margin: 0px; padding: 0px; text-align: left;">'
$sCodeString = StringReplace($sCodeString, @LF & $sStartMark & @LF, $sMarkStyle, 0, 1)
$sCodeString = StringReplace($sCodeString, @LF & $sStartMark, $sMarkStyle, 0, 1)
$sCodeString = StringReplace($sCodeString, $sStartMark & @LF, $sMarkStyle, 0, 1)
$sCodeString = StringReplace($sCodeString, $sStartMark, $sMarkStyle, 0, 1)
If StringInStr($sCodeString, $sMarkStyle) Then
$sCodeString = StringReplace($sCodeString, @LF & $sEndMark & @LF, '</div>', 0, 1)
$sCodeString = StringReplace($sCodeString, @LF & $sEndMark, '</div>', 0, 1)
$sCodeString = StringReplace($sCodeString, $sEndMark & @LF, '</div>', 0, 1)
$sCodeString = StringReplace($sCodeString, $sEndMark, '</div>', 0, 1)
EndIf
If StringLeft($sCodeString, 1) == @LF Then $sCodeString = StringTrimLeft($sCodeString, 1)
If StringRight($sCodeString, 1) == @LF Then $sCodeString = StringTrimRight($sCodeString, 1)
Local $aCodeSplit = StringSplit($sCodeString, @LF)
;~ _ArrayDisplay($aCodeSplit)
For $i = 1 To $aCodeSplit[0]
$sString &= ' ' & $aCodeSplit[$i] & '<br>' & @LF
Next
$sString = StringTrimRight($sString, 5) & @LF
$sString &= ' <center><button title="" type="button"' & @LF
$sString &= ' onclick="' & @LF
$sString &= " document.getElementById('spoiler" & $iIndex & "') .style.display='none'" & @LF
$sString &= ' ">Ausblenden</button></center>' & @LF
$sString &= ' </div>' & @LF
$sString &= ' <br><br>' & @LF
Return $sString
EndFunc ;==>_HTML_code
Func _HTML_text($iIndex)
Local $sString = ' <div>' & @LF
$sTextString = StringReplace($aOrder[$iIndex][2], @CRLF, @LF)
If StringInStr(StringLeft($sTextString, 1), @LF) Then $sTextString = StringTrimLeft($sTextString, 1)
If StringInStr(StringRight($sTextString, 1), @LF) Then $sTextString = StringTrimRight($sTextString, 1)
$sTextString = StringReplace($sTextString, @TAB, " ")
Local $aTextSplit = StringSplit($sTextString, @LF)
For $i = 1 To $aTextSplit[0]
$sString &= ' <FONT SIZE="4">' & $aTextSplit[$i] & '</FONT><br>' & @LF
Next
$sString &= ' <br>' & @LF
$sString &= ' </div>' & @LF
Return $sString
EndFunc ;==>_HTML_text
Func _IniWrite()
Local $sString = "[Einstellungen]" & @CRLF & @CRLF & "----------------------------------------" & @CRLF & @CRLF
$sString &= "// Schlagworte für die Container. Groß und Kleinschreibung müssen beachtet werden." & @CRLF
$sString &= "// Habe hier mit Zahlen begonnen, damit nicht mal versehentlich Variablen die gleichen Namen bekommen." & @CRLF & @CRLF
$sString &= "// Ein Titel muss angegeben werden (darf maximal vierzeilig sein)." & @CRLF & @CRLF & @CRLF
$sString &= "Startmarkierung für Titel=0TitelStart" & @CRLF & "Endmarkierung für Titel=0TitelEnde" & @CRLF & @CRLF & @CRLF
$sString &= "Startmarkierung für Text=0TextStart" & @CRLF & "Endmarkierung für Text=0TextEnde" & @CRLF & @CRLF & @CRLF
$sString &= "Startmarkierung für Code=0CodeStart" & @CRLF & "Endmarkierung für Code=0CodeEnde" & @CRLF & @CRLF & @CRLF
$sString &= "Startmarkierung für Markierungen=0MarkierungStart" & @CRLF & "Endmarkierung für Markierungen=0MarkierungEnde" & @CRLF
$sString &= @CRLF & @CRLF & "----------------------------------------" & @CRLF & @CRLF
$sString &= "// Farben im HTML-Farbcodes. Bspw. hier zu finden: http://html-color-codes.info/webfarben_hexcodes/" & @CRLF & @CRLF & @CRLF
$sString &= "Hintergrund-Farbe Fenster=#E6E6E6" & @CRLF & "Hintergrund-Farbe Codefeld=#FE9A2E" & @CRLF & "Hintergrund-Farbe Markierungen=#FFFF00"
FileWrite($hIniFile, $sString)
EndFunc ;==>_IniWrite
Alles anzeigen