Seite 1 von 3

if string vorhanden then ... else

Verfasst: 04.09.2007 21:43
von Zerosurf
Ich möchte in einer Textdatei den String "http://" suchen und falls er vorhanden ist - und nur dann - mit einem anderen String ersetzen.

Das mit dem ersetzen klappt auch schon wunderbar nur die Abfrage ob dieser String auch vorhanden ist, macht mir Probleme.

Hier mal mein Code:

Code: Alles auswählen

open$ = OpenFileRequester("Datei auswählen", "", "Text-Dateien (*.txt,*.nfo,*.log)| *.txt;*.nfo;*.log",0)

text$ = ""

If ReadFile(0, open$) 

  Repeat 
    help$ = LCase(ReadString(0))
    start$ = help$ + Chr(60) + Chr(47) + "a" + Chr(62) + Chr(60) + "br" + Chr(62) + Chr(13)
    help$ = ReplaceString(help$, "http:" + Chr(47) + Chr(47) , Chr(60) + "a href=" + Chr(34)+ "http:" + Chr(47) + Chr(47) , 1) 
    text$ + help$ +Chr(34) + Chr(62) + start$
  Until Eof(0)
  CloseFile(0) 
Else 
  MessageRequester("Link2Url", "Abruch: Datei konnte nicht geöffnet werden", #PB_MessageRequester_Ok) 
  End
EndIf 

save$ = SaveFileRequester("Speichern unter...", "", "HTML Document (*.html,*.htm,*.shtml) | *.html;*.htm;*.shtml",0)

If CreateFile(0, save$) 
  WriteStringN(0,text$) 
  CloseFile(0) 
Else 
  MessageRequester("Link2Url", "Abruch: Datei konnte nicht erstellt werden", #PB_MessageRequester_Ok) 
  End
EndIf 
MessageRequester("Link2Url","Datei erfolreich erstellt!", #PB_MessageRequester_Ok) 
End

Verfasst: 04.09.2007 22:11
von Bisonte
mir verbirgt sich der sinn in deiner frage.

wonach suchst du genau und worin ?

Du willst aus einer .txt Datei eine .html datei machen ?

oder umgekehrt ? oder wie genau.... ? aber im zweifelsfalle rate ich dir erstmal von den chr()'s ab, solange die zeichen "schreibbar" sind
nur bei sonderzeichen ist soetwas notwendig... chr(9) - Tabstopp oder chr(34) fuer die Anfuehrungsstriche oben....

upps fast vergessen:

im zweifelsfalle versuchs dochmal mit der FindString Funktion.

Verfasst: 04.09.2007 22:18
von Zerosurf
Also - hier zur Erklärung:

Ich wollte ein Programm schreiben welches aus einer Textdatei alle Links ausliest und dann als html-code in eine html-datei abspeichert:
http://www.purebasic.com (in einer text-datei)
wird zu
<a href="http://www.purebasic.com">http://www.purebasic.com</a><br> (in einer html-datei)
FindString - heißer tipp - danke!

Verfasst: 04.09.2007 22:36
von Zerosurf
wie setz ich jetzt findstring richtig ein?

kapier es grad irgendwie nicht!

sorry, war ein langer tag für mich!

mfg. Zerosurf

Verfasst: 04.09.2007 23:05
von Kiffi
Wenn Du davon ausgehst, dass ein Link mit "http://" anfängt und weiterhin
festlegst, dass in dem Link kein Leerzeichen vorkommen darf, dann kannst
Du folgendermaßen vorgehen:

Du suchst mit FindString() die Zeichenfolge "http://". Das Ergebnis (die
Position, an der "http://" gefunden wird) speicherst Du in einer Variable a.
Wenn a grösser als 0 ist (also auch wirklich was gefunden wurde) suchst Du
(ausgehend von Position a) nach einem Leerzeichen und speicherst dieses
Ergebnis in einer Variable b. Hiernach liegt Dein Link zwischen Position a und
b und Du kann ihn dann mit Mid() auslesen. Das Ersetzen des 'Text'-Links
sollte dann kein Problem mehr sein. Sollten mehrere Links in dem zu
untersuchenden Text vorhanden sein, musst Du obige Vorgehensweise in
einer Schleife ablaufen lassen (und zwar so oft, bis a gleich 0 ist).

Grüße ... Kiffi

Verfasst: 04.09.2007 23:12
von Zerosurf
Sorry Kiffi!

Hört sich zwar alles sehr logisch an - aber so gut bin ich leider noch nicht, daß ich das alleine umsetzen kann!

Verfasst: 04.09.2007 23:16
von Kaeru Gaman
nu denn, keep on trying.

das ist zwar ein hilfe-forum, aber nicht zum vorkaun da.

lies Kiffis anleitung mehrfach aufmerksam durch, die ist wirklich gut.
mach dir ein diagramm, welche aktion wann gemacht werden muss.

wenn du sowas programmieren willst, dann programmiere es.
es ist nunmal arbeit, das zu lernen.

wenn dir jemand fertigen code rüberschiebt, funktioniert es danach zwar vielleicht,
aber du hast nix draus gelernt, und ändern kannst du es auch nicht, weil du die funktion nicht verstehst.

Verfasst: 04.09.2007 23:26
von Zerosurf
Aber den Code hab ich bisher ganz ohne Forumshilfe geschafft - und das als blutiger Anfänger!
wenn dir jemand fertigen code rüberschiebt, funktioniert es danach zwar vielleicht,
aber du hast nix draus gelernt, und ändern kannst du es auch nicht, weil du die funktion nicht verstehst.
- Das seh ich nicht so! Gerade dann kann man daraus lernen -Ich hab aber auch in den Code-Schipseln nach geschaut und daraus abgeleitet.

Trotzdem wäre es sehr freundlich von Euch, wenn Ihr mir dem Code weiterhelfen könntet.

Vielen Dank!

mfg. Zerosurf

Verfasst: 04.09.2007 23:50
von Kiffi
Zerosurf hat geschrieben:Trotzdem wäre es sehr freundlich von Euch, wenn Ihr mir dem Code weiterhelfen könntet.
es ist wirklich nicht so schwierig, wie es auf den ersten Blick anmuten mag.
Ich gebe Dir eine kleine Einstiegshilfe:

Wie Du ja mittlerweile weißt, ist FindString() eine der Funktionen, die Du
für Deine Aufgabe benötigst. Also ist Dein erster Schritt, FindString() in
Deinen Editor (IDE oder jaPBe, egal welcher) einzutippen, den Cursor da
drauf zu setzen und F1 zu drücken. Jetzt sollte die PB-Hilfe erscheinen, die
den Einsatzzweck und die richtige Verwendung dieser Funktion erläutert.

Dort steht (im übertragenen Sinne), dass Du hiermit einen String innerhalb
eines anderen Strings suchen kannst. Als Rückgabewert liefert Dir diese
Funktion eine Zahl. Diese ist entweder die Position des gefundenen Strings
oder eine 0, wenn der String nicht gefunden wurde.

Kopiere Dir einfach mal das Beispiel, das in der Hilfe steht, in Deinen Editor
und starte PB.

Code: Alles auswählen

Position = FindString("PureBasic", "Bas", 1) ; 'Position' will get the value '5'
(Du solltest Dir 'Position' ausgeben lassen, um zu kontrollieren, ob hier
wirklich 5 zurückgegeben wird. Kann ja sein, dass der Hilfe-Autor sich
vertan hat ;-) )

Dein nächster Schritt wäre, das Beispiel zu modifizieren. Du möchtest ja
nicht "Bas" in "PureBasic" finden, sondern "http://" in einem anderen Text.

Code: Alles auswählen

ZuDurchsuchenderString.s = "...blablubli http://www.purebasic.com laberlaber..."
ZuFindenderString.s = "http://"

Position = FindString(ZuDurchsuchenderString, ZuFindenderString, 1)
Was steht nun in Position?

Nun musst Du das nächste Leerzeichen finden (und zwar ab 'Position').
Dafür musst Du den 3. Parameter von FindString() sinnvoll verändern.

Code: Alles auswählen

ZuDurchsuchenderString.s = "...blablubli http://www.purebasic.com laberlaber..."
ZuFindenderString.s = " "

Position2 = [hier bist Du gefragt]
Wenn Du dann soweit bist, die Position2 zu ermitteln, dann melde Dich
nochmal. Ich drück Dir die Daumen! :-)

Grüße ... Kiffi

Verfasst: 05.09.2007 00:03
von NicTheQuick
@Kiffi:
Sorry, mir war grad langweilig! :oops:

@Zerosurf:
Ich hab den Code mal kommentiert. Aber denk an Kiffi und versuch es dann
selbst mal noch zu modifizieren.

Code: Alles auswählen

EnableExplicit

Define a.l, b.l, link.s, open.s, text.s, line.l, save.s

open = OpenFileRequester("Datei auswählen", "", "Text-Dateien (*.txt,*.nfo,*.log)|*.txt;*.nfo;*.log", 0)

If ReadFile(0, open$)
  Repeat
    line = ReadString(0)
    a = 1 ;Position, ab der wir in der Zeile suchen
    Repeat
      a = FindString(LCase(line), "http://", a) ;Ab Position 'a' in 'line' nach "http://" suchen
      If a  ;Wenn etwas gefunden wurde
        b = FindString(line, " ", a) ;Suche das nächste Leerzeichen ab 'a' in 'line'
        If b = 0 : b = Len(line) + 1: EndIf ;Wenn kein Leerzeichen vorhanden, dann nimm die Länge des Strings als Ende der URL
        link = Mid(line, a, b - a)  ;Schneide den gefundenen Link heraus
        s = "<a href=" + Chr(34) + link + Chr(34) + ">" + link + "</a>" ;Erstelle den HTML-Code für den Link
        line = ReplaceString(line, link, s) ;Ersetze die URL in 'link' durch den HTML-Code in 's'
        a + Len(s) - 1 ;Addiere zu 'a' die Länge von 's' um weitere Links zu finden
      EndIf
    Until a = 0 ;Wenn kein "http://" gefunden wurde, breche die Suche ab...
    text + line + Chr(13) ;...und füge das Ergebnis zum Gesamttext in 'text' hinzu.
  Until Eof(0)
  CloseFile(0)
Else
  MessageRequester("Link2Url", "Abruch: Datei konnte nicht geöffnet werden")
  End
EndIf

save$ = SaveFileRequester("Speichern unter...", "", "HTML Dokument (*.html,*.htm,*.shtml)|*.html;*.htm;*.shtml", 0)

If CreateFile(0, save)
  WriteString(0, text)
  CloseFile(0)
  MessageRequester("Link2Url", "Datei erfolreich erstellt!")
Else
  MessageRequester("Link2Url", "Abruch: Datei konnte nicht erstellt werden")
EndIf
End