Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Zeichenkette aus Textdatei auslesen

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe!
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Communicate



Anmeldedatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: Mi Mai 10, 2006 7:53 pm    Titel: Zeichenkette aus Textdatei auslesen Antworten mit Zitat

Hi!

Ich hab hier mal wieder ein Problem...

Ich versuche mit folgenden Code einen String aus einer Textdateu auszulesen:

Code:

;Subtitle

;SubTitle ermitteln -------
i = 0
;erstmal eine schleife

Loop
{

   i += 1
   FileReadLine, line, test.txt, %i% ; lese die datei "shortfilename" in Zeile i (noch ändern!) und
; schreibe das Ergebnis in die Variable "Line
   if ErrorLevel <> 0
      break

   IfInString, line, WM/SubTitle
msgbox, %line%
;wenn der subSubtitle gefunden wurde, wird das ergebnis in die Var. Line geschrieben
   {
   Subtitle = %line%
   }
}
StringGetPos, pos, Subtitle,:
StringTrimLeft, Subtitle, Subtitle, 52




;------- SubTitle ermitteln -------


Der String WM/Subtitle kommt nur einmal in der Textdatei vor. Der String Subtitle jedoch mehrfach.

AHK erkennt nun mehrmals den String Subtitle und gibt mir danach in der Msgbox nacheinander alle Zeilen aus, die den String Subtitle enthalten.

In die Variable Subtitle wird aber kein Wert geschrieben.
Vermutlich weil sich AHK nicht entscheiden kann...


Was mache ich falsch?
Kann man meine Suche irgendwie auf "genauer Wortlaut" einschränken?

Vielleicht weis ja einer von euch eine Lösung

Grüße
Communicate
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BoBo
Gast





BeitragVerfasst am: Mi Mai 10, 2006 8:58 pm    Titel: Antworten mit Zitat

Code:
Loop, Read,  test.txt
{
   If InString(A_LoopReadLine,WM/SubTitle,CaseSensitive)
   {
      MsgBox, %line%
      Subtitle = %line%
      }
   }
StringSplit, Subtitle, Subtitle, :
MsgBox % Subtitle2
Ungetested.
Nach oben
Communicate



Anmeldedatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: Mi Mai 10, 2006 9:07 pm    Titel: klappt nicht :-( Antworten mit Zitat

Hi,

erstmal vielen Dank für die schnelle Antwort.

Beim ausführen erhalte ich folgende Fehlermeldung:

Error Call to nonexistent function.
Der Fehler muss in Zeile drei liegen...

Da habe ich InString mit InStr ersetzt. klappt soweit ganz gut.

Aber er findet den string nicht...

Woran kann das liegen?
Grüße
Communicate
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1878
Wohnort: Österreich

BeitragVerfasst am: Do Mai 11, 2006 6:41 am    Titel: Antworten mit Zitat

Habe mal ein funktionierendes Scriptfragment erstellt:
Code:
Searched_String = Dienstag

FileRead, FileContent, DS.txt
Loop, Parse, FileContent, `n, `r
{
   if InStr(A_LoopField, Searched_String, 1)
      msgbox %A_LoopField%
}
FileContent=

Ich lese lieber mit FileRead das ganze Ding ein und lösche die Variable, wenn sie nicht mehr benötigt wird, da es beim mittleren bis großen Dateien schneller geht Smile

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
BoBo
Gast





BeitragVerfasst am: Do Mai 11, 2006 8:31 am    Titel: Antworten mit Zitat

Code:
Loop, Read, test.txt
{
   If InStr(A_LoopReadLine,"WM/SubTitle") ; die "" sind wichtig!
   {
      MsgBox, %A_LoopReadLine%
      Subtitle = %A_LoopReadLine%
      }
   }
StringSplit, Subtitle, Subtitle, :
MsgBox % Subtitle2
Korrigiert. Getestet.
Nach oben
Communicat
Gast





BeitragVerfasst am: Do Mai 11, 2006 3:52 pm    Titel: Klappt immer noch nicht Antworten mit Zitat

Hi!

Vielen Dank für die lange Geduld mit mir... Smile

Leider klappt das immer noch nicht so ganz.
Er findet weiterhin alle Teile, wo Subtitle vorkommt, und nicht nur den Teil, wo WM/SUbtitle drin steht.

Ich lade mal das TXT-File hoch. Vielleicht könntet Ihr dann nochmal schauen...

Mein Ziel ist, das die Varibale Subtitle zum Schluss den Wert "Die Grenze" enthält...

Danke schonmal vorab.

TXT:
Code:
*
* Idx  Name                   Stream Language Type  Value
* ---  ----                   ------ -------- ----  -----
*   0  Duration                    0    0    QWORD  16184960000, 0x00000003c4b2e400
*   1  Bitrate                     0    0    DWORD  160433334, 0x099004b6
*   2  Seekable                    0    0     BOOL  True
*   3  Stridable                   0    0     BOOL  True
*   4  Broadcast                   0    0     BOOL  False
*   5  Is_Protected                0    0     BOOL  False
*   6  Is_Trusted                  0    0     BOOL  False
*   7  Signature_Name              0    0   STRING  ""
*   8  HasAudio                    0    0     BOOL  False
*   9  HasImage                    0    0     BOOL  False
*  10  HasScript                   0    0     BOOL  False
*  11  HasVideo                    0    0     BOOL  True
*  12  CurrentBitrate              0    0    DWORD  2250173, 0x002255bd
*  13  OptimalBitrate              0    0    DWORD  2250173, 0x002255bd
*  14  HasAttachedImages           0    0     BOOL  False
*  15  Can_Skip_Backward           0    0     BOOL  False
*  16  Can_Skip_Forward            0    0     BOOL  False
*  17  FileSize                    0    0    QWORD  467825020, 0x000000001be2717c
*  18  HasArbitraryDataStream      0    0     BOOL  True
*  19  HasFileTransferStream       0    0     BOOL  False
*  20  WM/ContainerFormat          0    0    DWORD  1, 0x00000001
*  21  Title                       0    0   STRING  "Eine schrecklich nette Familie"
*  22  DVR Index Granularity       0    0    DWORD  500, 0x000001f4
*  23  DVR File Version            0    0   BINARY  [16 bytes]
*  24  WM/SubTitle                 0    0   STRING  "Die Grenze"
*  25  WM/SubTitleDescription      0    0   STRING  "Sitcom. Al hat ein neues Hobby: seinen Apfelbaum. Dieser trägt nur einen einzigen Apfel. Als Jefferson ihn eines Tages isst, ist Al außer sich. Ein Grenzkrieg ist unausweichlich."
*  26  WM/Genre                    0    0   STRING  "Sitcoms,Shows & Serien"
*  27  WM/MediaCredits             0    0   STRING  "Ed O'Neill/Katey Sagal/Christina Applegate/David Faustino/Amanda Bearse/Ted McGinley;;;"
*  28  WM/ParentalRating           0    0   STRING  ""
*  29  WM/ParentalRatingReason     0    0   STRING  ""
*  30  WM/ProviderRating           0    0   STRING  ""
*  31  WM/OriginalReleaseTime      0    0   STRING  "0001-01-01T00:00:00.0000000+01:00"
*  32  WM/Language                 0    0   STRING  "de"
*  33  WM/MediaStationCallSign     0    0   STRING  "KABEL1"
*  34  WM/MediaStationName         0    0   STRING  "Kabel 1 Deutschland"
*  35  WM/MediaNetworkAffiliation   0    0   STRING  ""
*  36  WM/MediaOriginalChannel     0    0   STRING  "20"
*  37  WM/MediaOriginalBroadcastDateTime   0    0   STRING  "2001-12-01T00:00:00.0000000+01:00"
*  38  WM/MediaOriginalRunTime     0    0    QWORD  15000000000, 0x000000037e11d600
*  39  WM/WMRVServiceID            0    0   STRING  "752683"
*  40  WM/MediaIsStereo            0    0     BOOL  False
*  41  WM/VideoClosedCaptioning    0    0     BOOL  False
*  42  WM/MediaIsRepeat            0    0     BOOL  True
*  43  WM/MediaIsLive              0    0     BOOL  False
*  44  WM/MediaIsTape              0    0     BOOL  False
*  45  WM/MediaIsDelay             0    0     BOOL  False
*  46  WM/MediaIsSubtitled         0    0     BOOL  False
*  47  WM/MediaIsPremiere          0    0     BOOL  False
*  48  WM/MediaIsFinale            0    0     BOOL  False
*  49  WM/MediaIsSAP               0    0     BOOL  False
*  50  WM/WMRVRequestID            0    0    DWORD  3247, 0x00000caf
*  51  WM/WMRVScheduleItemID       0    0    DWORD  2787, 0x00000ae3
*  52  WM/WMRVProgramID            0    0   STRING  "1429760"
*  53  WM/WMRVQuality              0    0    DWORD  3, 0x00000003
*  54  WM/WMRVEncodeTime           0    0    QWORD  632796577809218750, 0x08c825228366bcbe
*  55  WM/Provider                 0    0   STRING  "BDS"
*  56  WM/ProviderCopyright        0    0   STRING  "© 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Rechtliche Hinweise: http://go.microsoft.com/fwlink/?LinkId=8430

"
*  57  WM/WMRVOriginalSoftPrePadding   0    0    DWORD  -120, 0xffffff88
*  58  WM/WMRVOriginalSoftPostPadding   0    0    DWORD  180, 0x000000b4
*  59  WM/WMRVActualSoftPrePadding   0    0    DWORD  -120, 0xffffff88
*  60  WM/WMRVHardPrePadding       0    0    DWORD  0, 0x00000000
*  61  WM/WMRVKeepUntil            0    0    DWORD  -1, 0xffffffff
*  62  WM/WMRVEndTime              0    0    QWORD  632796594000000000, 0x08c8252648727400
*  63  WM/WMRVWatched              0    0     BOOL  True
*  64  WM/WMRVATSCContent          0    0     BOOL  False
*  65  WM/WMRVDTVContent           0    0     BOOL  True
*  66  WM/WMRVBitrate              0    0    QWORD  4618873763432671216, 0x401989374bc6a7f0
*  67  WM/WMRVHardPostPadding      0    0    DWORD  0, 0x00000000
*  68  WM/WMRVActualSoftPostPadding   0    0    DWORD  0, 0x00000000
*  69  WM/WMRVContentProtectedPercent   0    0    DWORD  0, 0x00000000
*  70  WM/WMRVContentProtected     0    0     BOOL  False
*  71  WM/WMRVExpirationDate       0    0    QWORD  4703607668705591271, 0x41469240ffffffe7
*  72  WM/WMRVInBandRatingSystem   0    0    DWORD  255, 0x000000ff
*  73  WM/WMRVInBandRatingLevel    0    0    DWORD  255, 0x000000ff
*  74  WM/WMRVInBandRatingAttributes   0    0    DWORD  0, 0x00000000
*  75  WMFSDKVersion               0    0   STRING  "10.00.00.3646"
*  76  WMFSDKNeeded                0    0   STRING  "0.0.0.0000"
*  77  VBR Peak                    0    0    DWORD  159498240, 0x0981c000
*  78  IsVBR                       0    0     BOOL  True
*  79  ASFLeakyBucketPairs         0    0   BINARY  [114 bytes]
*  80  subtitle                    0    0   STRING  "test"
*  81  1                           0    0    DWORD  0, 0x00000000
*  82  WM/MediaClassPrimaryID      0    0     GUID  {DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B}
*  83  WM/MediaClassSecondaryID    0    0     GUID  {BA7F258A-62F7-47A9-B21F-4651C42A000E}
*  84  WM/ASFPacketCount           0    0    QWORD  57104, 0x000000000000df10
*  85  WM/ASFSecurityObjectsSize   0    0    QWORD  0, 0x0000000000000000
Nach oben
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1878
Wohnort: Österreich

BeitragVerfasst am: Do Mai 11, 2006 4:17 pm    Titel: Antworten mit Zitat

Sofern es sich um den Typ immer um einen STRING handelt kannst du nach der Position des Strings "STRING" suchen und per "StringTrimLeft" die Positon + 8 (Stringlänge + 2 Leerzeichen) wegschneiden.

*ungetestet* (setzt voraus, dass die Zeile gefunden wurde und sich bereits in der Variable Subtitle befindet):
Code:
StringTrimLeft, Subtitle, Subtitle, % InStr(Subtitle, "STRING", 1) + 8
Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Communicat
Gast





BeitragVerfasst am: Do Mai 11, 2006 6:35 pm    Titel: Antworten mit Zitat

Hi Thalon!

Das weg schneiden ist nicht so schwierig, dass hab ich schon hingekriegt (wenn auch weit umständlicher als du).

Mein Problem ist immer noch die Zeile
Subtitle in die Variable zu kriegen...

Grüße
Communicate
Nach oben
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1878
Wohnort: Österreich

BeitragVerfasst am: Do Mai 11, 2006 11:34 pm    Titel: Antworten mit Zitat

Hä?
Du hast die Info doch bereits dort?

Kannst du mir kurz mal posten, welchen Code du bis jetzt verwendest und wo das Problem jetzt genau liegt?

Kann dir vorher nicht mehr helfen..

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Communicate



Anmeldedatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: Fr Mai 12, 2006 2:49 pm    Titel: Antworten mit Zitat

Hallo Thalon,

also, ich nutze jetzt folgenden Code um die variable Subtitle zu füllen:
Code:
Searched_String = WM/SubTitle

FileRead, FileContent, test.txt
Loop, Parse, FileContent, `n, `r
{
   if InStr(A_LoopField, Searched_String, 1)
      SubTitle = %A_LoopField%
}
msgbox, %SubTitle%


Die Messagebox zeigt mir dann aber nicht die Zeile WM/SubTitle sondern die Zeile WM/SubTitleDescription an.

ich weis echt nicht mehr weiter, egal was ich auch tue, er speichert immer den Wert von WM/SubTitleDescription und nicht von WM/Sutitle in der Variable.

Wenn ich bei der Variablendeklaration von Searched_String das WM/Subtitle in Anführungszeichen setze, wirft mir dir Messagebox den gesamten Inhalt von Text.txt aus.

Ich hoffe, du verstehst jetzt mein Problem...

Grüße
Communicate
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hd0202



Anmeldedatum: 12.05.2006
Beiträge: 29

BeitragVerfasst am: Fr Mai 12, 2006 3:25 pm    Titel: Antworten mit Zitat

Ersetze die erste Zeile durch

Searched_String := "WM/SubTitle "

Doppelpunkt und Leerstelle im String beachten

Grüße

Hubert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Communicate



Anmeldedatum: 23.04.2006
Beiträge: 4

BeitragVerfasst am: Fr Mai 12, 2006 6:10 pm    Titel: Antworten mit Zitat

Danke, das wars!

Aber was macht denn der doppelpunkt vor dem "=" ?
Und warum das leerzeichen?

Grüße
Communicate
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BoBo
Gast





BeitragVerfasst am: Fr Mai 12, 2006 10:32 pm    Titel: Antworten mit Zitat

Zitat:
Aber was macht denn der doppelpunkt vor dem "=" ?
Damit wird der dem Gleichheitszeichen folgende Text als Ausdruck/Expression übernommen. Damit konnte das Leerzeichen durch Verwendung der Anführungzeichen im Text "mit untergebracht" werden. Grund dürfte sein das AHK bei Zuweisung einer Variablen ansonsten führende/folgende Leerzeichen automatisch abschneidet (siehe AutoTrim)
Code:
Searched_String := "WM/SubTitle "
Zitat:
Und warum das leerzeichen?
Weil damit WM/SubTitleDescription aussen vor bleibt - denn dieses enthält kein unmittelbar folgendes Leerzeichen nach WM/SubTitle.
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe! Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de