Liegen alle diese Dateien, in ein und demselben Ordner?
Beiträge von JoGi
-
-
Wenn du dann irgendwann dich doch Richtung reguläre Ausdrücke orientieren möchtest
Ich "programmiere" seit ca.10 Jahren ab und zu kleine Programme mit AutoIT.
Zum Datensichern, Ping Abfragen über GUI mit Farbanzeige etc. Und da tu ich mir schon schwer. Also ich denke nicht dass ich mit StringRegExp einen grossen Wurf mache.
Aber danke für den Hinweis.
Beziehungsweise danke für DIE Hinweise
-
Und ein GROSSES DANKE nochmal an alle.
Man merkt halt schon welch Profis sich hier aufhalten.
-
Du wirst es zwar nicht glauben aber ihr habt mir mehr als genug geholfen.
Das StringInStr funktioniert wunderbar.
Es handelt sich um eine Datensicherung, die Werte lese ich aus und schreib sie mir in eine csv.Datei.
Und da es die gleiche Maschine desöfteren gibt, kann ich mittels dieser csv.Dateien eine Excel Tabelle erstellen mit denen ich dann Vergleiche anstellen kann (verschiedene Parameter und Einstellungen)
Ja ich weiss dass es die Möglichkeit gibt gleich in Excel reinzuschreiben aber so fit bin ich dann doch nicht.
Es funktioniert alles wunderbar. Ich bekomme die Datei eingelesen, jeden String aufgelöst und gespeichert.
Bei einigen Sachen musste ich halt um die Ecke denken, aber für mich passt´s so.
Hätte da allerdings eine letzte Frage für eine Aufgabe die ich, meiner Meinung nach umständlich gelöst habe:
Folgende(r) String(s):
8009 635
8008 "text 2"
8050 639 2
Der erste geht ja super klar mit StringSpit aufzulösen (Trenner "Leerzeichen" und hab dann demenstprechend 2 Werte in nem Array.
Der zweite und dritte String gibt 3 Werte in nem Array zurück. Gibts ne Flag oder Option oder Befehl um den Trenner nur einmalig anzuwenden?
-
Also ich sag mal so:
Nach der Arbeit bis in die Nacht hinein zu programmieren, bzw. sinnerfassend lesen ist dann schon schwer
Spoiler anzeigen
Also danke mal an alle die mir da weitergeholfen haben.
Musste umswitchen da die riesige Textdatei doch nicht nur <value key> enthielt. Dank sei Notepad++.
Gewisse Zeilen lauten <3098 43><10987 52/><874 3><1 1><5 2> --> daher der Gedanke, alles zwischen <> auslesen und das Leerzeichen als Trenner, fertig.
Dann wieder folgende Zeilen <10985 "Text"/><group 5>< group 6 stop 578>< model 8=9> teils mit vorangestellten Leerzeichen etc.
Ich habe es jetzt wirklich notgedrungen so gelöst dass ich mittels FileReadLine einlese.
Mittels Stringbetween <> eingrenze und den String danach durch eine Routine laufen lassen muss.
Was um diese Uhrzeit nicht meine Stärke ist --> der Befehl StringRegExp ist böse, sehr böse.
Momentan schaffe ich es nicht mal den String nach folgenden Kriterien zu durchsuchen:
String enthält ein "=" Zeichen
String enthält "stop"
String enthält "iy"
String enthält "group"
Momentan ist es Learning by Doing
-
Hallo miteinander,
es gibt die Möglichkeit mittels FileReadToArray, die Datei einzulesen und jede Zeile anzeigen zu lassen (In MsgBox, als String etc.)
Aber: Funktioniert das irgendwie dass ich die ausgelesene Zeile mittels StringRegExp (konkret <> die beiden Zeichen) prüfe UND denn Inhalt der ausgelesenen Zeile wieder in einem Array zurückgeben lasse?
Also in etwa so:
Die Datei besteht ja nur aus:
<Value1 Key1><Value2 Key2><Value3 Key3>
<Key1 Value><Key1 Value><Key1 Value><Key1 Value><Key1 Value><Key1 Value>
<Key1 Value>
<Key1 Value><Key1 Value><Key1 Value><Key1 Value><Key1 Value>
<Key1 Value><Key1 Value><Key1 Value><Key1 Value>
<Key1 Value><Key1 Value><Key1 Value><Key1 Value>
Also ich lese Zeile 1 aus:
<Value1 Key1><Value2 Key2><Value3 Key3>
Mittels RegEx oder sonstigem Befehl alles zwischen <> auslesen
und Rückgabe in Array
value1 key1
value2 key2
value3 key3
Danke, LG
-
Denn er hat nicht gesagt er möchte alle werte zwischen '<''>' & diese nochmal im Leerzeichen splitten um statt 1 Wert 2 Werte zu erhalten.
Leider ist es aber genauso. Hab mich da wohl doof ausgedrückt.
Aber trotzdem Danke für die Denkhilfe.
Les die datei doch in ein array mit FileReadToArray
Danke an alle die da Vorschläge gemacht haben. Im Prinzip hätte ich ja nur den Denkanstoss benötigt, das da gleich Vorschläge gepostet werden, damit hätt ich nicht gerechnet.
-
Hallo Forum,
benötige für ein Programm einen kleinen Denkanstoss zur Umsetzung. Programmieren versuch ichs dann alleine
Also zum eigentlichen Thema: Ich möchte aus einer Datei Daten auslesen und in eine Excel Tabelle oder Datenbank schreiben.
Zur Textdatei: In dieser befindet sich folgendes
<Value1 Key1><Value2 Key2><Value3 Key3>etc. etc.
Das ganze läuft bis zu 50 mal in einer Zeile und dann noch 150 Zeilen runter.
Also alle Werte zwischen "<>" müssen gespeichert werden und der Wert ist immer durch Leerzeichen getrennt. Simpler Aufbau, aber an der Umsetzung scheitert es.
Wie würdet ihr das ganze angehen? Mein erster Gedanke: File öffnen, erste Zeile einlesen, erstes Zeichen einlesen, Zeichen für Zeichen einlesen bis ">", dann StringSplit und beide Werte abspeichern, nächstes Zeichen einlesen, Loop Schleife bis ">" und so weiter und so fort. Nur denke ich mal dass das nicht ganz der Lösungsansatz ist, Zeichen für Zeichen einzulesen.
mfG
JoGi
-
Alles Klar, Danke.
Gelöst.
-
Vielen Dank für die Rückmeldungen! Also kann ich mir die Dateistrukturen ansehen und muss dann nur die benötigten Files entpacken und nicht den ganzen Ordner.
mfG
-
Von 7-Zip gibt es eine Kommandozeilenversion, welche du super verwenden kannst um mit dieser per Skript zu arbeiten.
Natürlich kann man mit dieser sich auch eine Dateiliste ausgeben lassen.Das kann man z.B. folgendermaßen machen - daraus ist auch schnell eine Funktion zur Wiederverwendung gebastelt:
AutoIt
Alles anzeigen#include <Array.au3> ; Pfad zur 7za.exe Global $sPath7Za = @ScriptDir & "\7za.exe" ; Pfad zur Zip/7z-Datei Global $sPathZipFile = "C:\Users\Admin\Downloads\7z2201-extra.7z" ; 7za Datei analysieren lassen Global $hPID = Run('"' & $sPath7Za & '" l "' & $sPathZipFile & '"', "", @SW_HIDE, 2) ; warten bis Prozess beendet ist ProcessWaitClose($hPID) ; Rückgabe in Variable einlesen: Global $sFileList = StdoutRead($hPID) ; Dateiliste auslesen: Global $aFilesRaw = StringRegExp($sFileList, '(?xm)^(20\d\d-\d\d-\d\d)\h(\d\d:\d\d:\d\d).{6}\h+(\d+)\h+(\d*)\h+(.+)$', 4) ; In 2D-Array konvertieren: Global $aFiles[UBound($aFilesRaw)][5] Global $iC = 0 For $aFile In $aFilesRaw For $i = 0 To 4 $aFiles[$iC][$i] = $aFile[$i+1] Next $iC += 1 Next ; Dateiliste ausgeben: _ArrayDisplay($aFiles, "Dateiliste", "", 64, "|", "Datum|Zeit|Größe|komprimiert|Name")
Danke für die raschen Antworten.
Deine Version entzippt die Datei? Oder ist die Kommandozeilenversion so programmiert dass es wirklich nur mit Array ohne entzippen funktioniert?
LG
-
Guten Abend miteinander,
gibt es mittlerweile - war ja ein paar Jahre abwesend - eine Funktion um Dateien in einem Archiv auszulesen ohne diese entpacken zu müssen?
Hab ne zeit lang gegoogelt, aber irgendwie kam ich da nicht richtig weiter, vor allem da die Threads älter als 10 Jahre waren.
Warum, weshalb, wieso brauche ich das?
Muss beruflich eine jede Menge Datensicherungen welche gezippt sind verwalten.
Aus einigen Files muss ich "Produktnummern" rauskopieren und in eine Excel Liste eintragen.
Ja ich weiss dass es die Möglichkeit mit 7z und AutoIT gibt, aber das ist ne gewaltige Datenmenge das alles zu entzippen.
Also ich möchte sämtliche Ordner und Dateistrukturen sehen, davon in einen speziellen Ordner reinsehen und hier ein bestimmtes Textfile durchsuchen.
LG
JoGi
-
Hallo Forum,
anbei ein Script Code
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
$Form1 = GUICreate("Form1", 800, 650, 188, 103)
$Tab1 = GUICtrlCreateTab(184, 24, 600, 600)
_TABInsertData()
$Button1 = GUICtrlCreateButton("BTN_1 _TabInsertData", 16, 72, 129, 25, -1, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
$Button2 = GUICtrlCreateButton("BTN_2 _TabVersuch", 16, 104, 129, 25, -1, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
$Button3 = GUICtrlCreateButton("BTN_3 _Reset", 16, 136, 129, 25, -1, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_GUICtrlTab_DeleteAllItems($Tab1)
_TABInsertData()
Case $Button2
_GUICtrlTab_DeleteAllItems($Tab1)
_TABVersuch()
Case $Button3
_GUICtrlTab_DeleteAllItems($Tab1)
EndSwitch
WEnd
Func _TABInsertData()
$TabSheet1 = GUICtrlCreateTabItem("TAB 1")
_InputDaten()
$TabSheet2 = GUICtrlCreateTabItem("TAB 2")
_InputDaten()
$TabSheet3 = GUICtrlCreateTabItem("TAB 3")
GUICtrlCreateTabItem("")
EndFunc ; _TABInsertData
Func _InputDaten()
$Combo1 = GUICtrlCreateCombo("", 300, 121, 57, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL), $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_ENABLE)
$Input1 = GUICtrlCreateInput("", 420, 281, 89, 21)
GUICtrlSetState(-1, $GUI_ENABLE)
$LabelCombo1 = GUICtrlCreateLabel("Combo1", 220, 121, 38, 17, $SS_CENTER, $WS_EX_STATICEDGE)
$LabelAlter = GUICtrlCreateLabel("Input1", 372, 281, 25, 17, $SS_CENTER, $WS_EX_STATICEDGE)
EndFunc ; _InputDatenFunc _TABVersuch()
[/autoit]
$TabSheet4 = GUICtrlCreateTabItem("TAB 4")
$TabSheet5 = GUICtrlCreateTabItem("TAB 5")
$TabSheet6 = GUICtrlCreateTabItem("TAB 6")
GUICtrlCreateTabItem("")
EndFunc ; _TABVersuchDas sollte eigentlich folgendes machen:
In TAB 1 das gleich anzeigen wie in TAB 2. Möchte das ganze dann so gestalten dass TAB 1 (GUI_ENABLE) und TAB 2 (GUI_DISABLE) hat.
Nur wird mir das ganze in TAB 5 und 6 auch angezeigt. Und nach dem Reset wird gar nichts in TAB 1 angezeigt( nach Button 3 wieder Button 1 drücken und das Input und die Combo sind wieder weg)
Keine Ahnung warum..guisetstate setzen oder was?
Bitte um Denkanstöße..
mfg
Jogi
-
Kurz und bündig:
Ja es funktioniert aber es ist komplizierter da man die ganzen Controls verstecken muss.
25 Minuten nach Erstellung des Threads bereits gelöst....
Best Community in the World
-
-
yup, fehler geändert
-
Hallo Forum,
hätte eine Frage zu den beiden Befehlen:
1)
[autoit]GuiCtrlCreateTabItem
[/autoit]2)
[autoit]_GuiCtrlTab_InsertItem
[/autoit]An und für sich auf den ersten Blick dasselbe ABER:
Annahme wir programmieren 2 Tabs, in eine soll ein BUTTON, in die andere ein EDIT Fenster
Mit dem ersten Befehl schaffe ich es so zu gestalten, beim zweiten Befehl hab ich in beiden TABS BUTTON und EDIT Fenster.
Kann es sein dass es mit dem zweiten Befehl nicht funktioniert?
mfG Jogi
-
Was kann man machen dass ich die GUI nicht komplett verkleinern kann sondern, sagen wir mal salopp, das verkleinern der GUI aufhört wenn die GUI eine Größe von 40x40 hat?
Mir ist klar dass es Befehle gibt mit denen man die Größe des Fensters abfragen kann. Aber was dann?
-
Würd ich ja. Nur nach was? "Bilddateiressourcen in Datei verstecken"??
Ich versteh da nur Bahnhof. Bin leider kein Profi und bei weitem nicht so herablassend wie so manch anderer.
-
Nochmal: Ich bin die ganze Woche beruflich unterwegs und will mir das am Wochenende zuhause in aller Ruhe zusammenbasteln. Wollte mir hier Infos einholen damit ich nicht am Wochenende "tüfteln" muss und gleich beginnen kann.
Trotz aller Differenzen nochmals DANKE an alle!