Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Teil eines Textes auslesen

Begonnen von Tante, September 21, 2022, 15:30:58

⏪ vorheriges - nächstes ⏩

Tante

Um das Direktfenster einzublenden, entweder Menü "Ansicht" - "Direktfenster" oder [STRG]+[G] auf der Tastatur verwenden.
[/quote]


Hmm....auch das Funktioniert leider nicht.

PhilS

Zitat von: Tante am September 23, 2022, 10:23:10Hmm....auch das Funktioniert leider nicht.
Bitte gewöhnt dir an statt "funktioniert nicht" zu schreiben was genau passiert oder nicht passiert.

Das Direktfenster einzublenden funktioniert garantiert wie beschrieben. Im worst case ist das Fenster ganz an den unteren Rand gezogen, so dass man es kaum sehen kann.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Tante

Entschuldigung, da hast natürlich absolut recht. Funktioniert nicht ist nichts aussagend.
Ich konnte das Direktfenster einblenden jedoch befanden sich darin keinerlei Einträge.

Tante

Hallo zusammen,

könnte mich jemand hier noch unterstützen, ich komme leider nicht weiter.

Vielen Dank. 

ebs17

Du hast anscheinend einen Teil meines Vorschlages probiert. Aber Du hast die vorangestellte Schlussfolgerung nicht bewertet, und Du hast nicht den Satz nach dem Codeblock sichtbar wahrgenommen.

Infolgedessen kann ich nur der Meinung sein, dass Du noch nicht vollständig gelesen hast und also noch einige Zeit für dieses brauchst. Diese Zeit bekommst Du.
Mit freundlichem Glück Auf!

Eberhard

PhilS

Zitat von: Tante am September 23, 2022, 11:50:42Ich konnte das Direktfenster einblenden jedoch befanden sich darin keinerlei Einträge.
Schwer zu sagen, was dafür die Ursache ist.

Du hast den Code in ein Prozedur in einem allgemeinen Modul kopiert?,
Du hast die in meinem Beispiel verkürzte HAYSTACK-Konstante mit dem vollständigen Text initialisiert?
Du hast den Code auch wirklich ausgeführt?

@ebs17, ich glaube dein Lösungsvorschlag ist hier nicht direkt anwendbar, weil eben nicht Zeilen=Datensätze, sondern Zeilen="Textzeilen innerhalb eines Datensatzes" sind.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

ebs17

#21
Zitathier nicht direkt anwendbar
Da magst Du recht haben, die Beschreibung ist für mich aber nicht klar, sondern interpretierbar.

Bei einem Text über alles würde ein Code etwas anders aussehen, schon mal wegen mindestens zwei Rückgabewerten, die ich dann auch in eigenen Datensätzen ablegen würde. Damit wird auch gleich klar, dass man sich mit dem DANACH und was sonst noch intensiver beschäftigen müsste, um im Nachgang eine direkte Nutzbarkeit zu haben. Ohne das Wissen darum sind Codes für die Tonne, es sei denn, Dritte nehmen diese für ein vertieftes Lernen.

Man darf aber auch die Frage stellen: Warum zerlegt man die Textzeilen nicht gleich bei Import in Datensätze, als Minimum einer Aufbereitung, wo doch sichtbar maximale Schwierigkeiten bestehen, mit dem Gesamtblock überhaupt umzugehen. Einer weiteren und laufenden Auswertung ist das, selbst wenn man es beherrscht, ebenfalls nicht förderlich (Performance, Komplexität, Fehleranfälligkeit).
Womöglich bis sicher werden noch weitere Informationen atomar benötigt.
Da könnte ich provokativ nachfragen, wieviele Instr-Funktionen mit Do ... Loop man nachreichen möchte.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

@Tante
Versuche es doch noch einmal mit Eberhards Abfrage.
Die Fehlermeldung, die du beim ersten Mal bekommen hast, stammt
von dem fehlenden Verweis auf die entsprechende Bibliothek, -
Microsoft VBScript Regular Expressions 5.5 (oder höher).

Gehe also im VBE auf das Menu "Verweise" und setze ein Häkchen
bei der o.a. DLL.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

@Eberhard
ZitatWarum zerlegt man die Textzeilen nicht gleich bei Import in Datensätze
Dies
ZitatNach dem Import in Access habe ich ein Feld mit 1800 Zeilen. Jede Value Name ist eine einzelne Zeile.
deutet aber darauf hin, dass es so ist. Ich interpretiere hier Zeile = DS, was ja auch deiner
Abfrage zu Grunde liegt. Deshalb mein Hinweis darauf.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

@ekkehard:
Nein, kein Verweisproblem. Die verwendete Funktion verwendet Late Binding. Allerdings müsste man sie für eine Verwendung in seine DB übernehmen (inkl. der Property => eine Instanz für alles).
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

@Eberhard
O.K., das hatte ich übersehen, will sagen, dass ich mir deinen Link nicht
angeschaut hatte.
Das hat der TS aber auch nicht, und wenn hat er es nicht verstanden.

Ich umgehe jetzt mal deine Domäne "lesen und verstehen" und helfe ihm aus
der Patsche.

@Tante
Du musst von dem Code aus Eberhards Link die Member-Variable
Private pRegEx As Objectund die beiden Functions
Public Property Get oRegEx() As Object
   If (pRegEx Is Nothing) Then Set pRegEx = CreateObject("Vbscript.Regexp")
   Set oRegEx = pRegEx
End Property
sowie
Public Function RegExReplace(ByVal SourceText As String, _
      ByVal SearchPattern As String, _
      ByVal ReplaceText As String, _
      Optional ByVal bIgnoreCase As Boolean = True, _
      Optional ByVal bGlobal As Boolean = True, _
      Optional ByVal bMultiLine As Boolean = True) As String
   
   With oRegEx
      .Pattern = SearchPattern
      .IgnoreCase = bIgnoreCase
      .Global = bGlobal
      .Multiline = bMultiLine
      RegExReplace = .Replace(SourceText, ReplaceText)
   End With
End Function
in ein allgemeines Modul deiner DB kopieren, dann sollte es mit Eberhards
Abfrage auch ohne Fehlermeldung klappen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Tante

Hallo zusammen,

es hat zum Teil funktioniert :) . Wenn ich die Abfrage ausführe erhalte ich folgendes Ergebnis:

Feld1                                                                                                Content
<Value Name="InstallMediaName"></Value>                               <Value Name="InstallMediaName"></Value>
<Value Name="InstallMediaName"></Value>                               <Value Name="InstallMediaName"></Value>
<Value Name="InstallMediaName">PPKS1890</Value>             <Value Name="InstallMediaName">PPKS1890</Value>
<Value Name="InstallMediaName">OPPKS15559000f</Value>   <Value Name="InstallMediaName">OPPKS15559000</Value>


Alle anderen Zeilen außer InstallMediaName wurden herausgefiltert. Es wurde ein zweites Feld (Content) hinzugefügt. Das ist auch Prima. Jedoch sollte in diesem Feld nur der Inhalt aus diese Zeile ausgelesen werden. Also zum Beispiel sollte im Feld Content nur PPKS1890 oder OPPKS15559000f stehen.


ebs17

#27
Ich habe keine Vorstellung davon, WAS genau WOMIT genau Du etwas anstellst. Fragen beantwortest Du auch nicht wirklich, und verdammt, mein Zauberstab ist unter den Schrank gerollt.

Wenn das Beschreiben nicht so Dein Ding ist, gäbe es einen Ausweg. Lade hier eine Demo hoch, so dass man sich an vorhandenen Fakten orientieren könnte. Da könnte man auch dem "ungetestet" den Inhalt nehmen.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo Tante,
Bei RegEx kann ich dir (Asche auf mein Haupt) leider nicht weiterhelfen.
Da Philips Function aber funktioniert, kannst du auch diese in der
Abfrage verwenden
angepasste Function
Public Function GetInstalledMediaName(sFeldInhalt As String) As String

    Const STARTPATTERN As String = "<Value Name=""InstallMediaName"">"
    Const ENDPATTERN As String = "</Value>"
   
    Dim startPos As Long
    Dim endPos As Long
   
    Do
        startPos = InStr(startPos + 1, sFeldInhalt, STARTPATTERN) + Len(STARTPATTERN)
        If startPos > Len(STARTPATTERN) Then
            endPos = InStr(startPos, sFeldInhalt, ENDPATTERN)
            'zum Anschauen im Direktfenster
            Debug.Print Mid(sFeldInhalt, startPos, (endPos - startPos))
            'zur Rückgabe an die Abfrage
            GetInstalledMediaName = Mid(sFeldInhalt, startPos, (endPos - startPos))
        End If
    Loop Until startPos = Len(STARTPATTERN)
   
End Function
Abfrage
SELECT
   FeldY,
   GetInstalledMediaName(FeldY) AS Content
FROM
   TabelleX
WHERE
   Instr(1, FeldY, "InstallMediaName") > 0
Wahrscheinlich nicht der Performance-Burner, aber bei nur ca. 180 DS aus
der Gesamtmenge fällt das wohl nicht so ins Gewicht.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Tante

Zitat von: ebs17 am September 27, 2022, 13:10:10Ich habe keine Vorstellung davon, WAS genau WOMIT genau Du etwas anstellst. Fragen beantwortest Du auch nicht wirklich, und verdammt, mein Zauberstab ist unter den Schrank gerollt.

Wenn das Beschreiben nicht so Dein Ding ist, gäbe es einen Ausweg. Lade hier eine Demo hoch, so dass man sich an vorhandenen Fakten orientieren könnte. Da könnte man auch dem "ungetestet" den Inhalt nehmen.

Hallo Eberhard,

zuerst vielen Dank das du dich der Sache freiwillig annimmst und hilfst! Ich erwarte natürlich nicht das du dein Zauberstab unter dem Schrank wieder herholst. Aus meiner Sicht (einem Access Laien) habe ich es umfangreich versucht darzustellen. Vielleicht entspricht es nicht den Vorstellungen eines Gurus wie dir. Bitte habe Nachsicht, dass dem einen oder anderen das Wissen oder Verständnis fehlt was für Info benötigt werden um solch ein Problem zu lösen.

Viele Grüße