Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Replace stolpert ein wenig

1 view
Skip to first unread message

Georg Gruber

unread,
Jul 7, 2023, 5:00:47 AM7/7/23
to
Ergänzung fehlender Quoten in einer Kursdatei:

RE_Parse ($line, ";([0-9,.]+);", $quote)
$line = replace ($line, "; ;", ";"+$quote+";", true)

In : 2019-01-29; ; ; ;1.992;
Out: 2019-01-29;1.992; ;1.992;1.992;

Beim ersten Durchlauf wird der mittlere fehlende Wert nicht ergänzt,
dafür braucht es einen zweiten Scriptlauf.

In : 2019-01-29;1.992; ;1.992;1.992;
Out: 2019-01-29;1.992;1.992;1.992;1.992;

--
LG Georg

Löwen föhnen ist keine TikTok-Challenge.

Heiko Rost

unread,
Jul 7, 2023, 6:06:18 AM7/7/23
to
Georg Gruber schrieb:

> RE_Parse ($line, ";([0-9,.]+);", $quote)
> $line = replace ($line, "; ;", ";"+$quote+";", true)
>
> In : 2019-01-29; ; ; ;1.992;
> Out: 2019-01-29;1.992; ;1.992;1.992;
>
> Beim ersten Durchlauf wird der mittlere fehlende Wert nicht ergänzt,
> dafür braucht es einen zweiten Scriptlauf.
>
> In : 2019-01-29;1.992; ;1.992;1.992;
> Out: 2019-01-29;1.992;1.992;1.992;1.992;

Meines Erachtens nach verhält sich replace korrekt. Das erste "; ;"
wurde gefunden und ersetzt. Das mittlere "; ;" existiert dann nicht
mehr, weil das ";" vom Anfang bereits verarbeitet wurde. Die Funktion
testet also weiter ab " ; ;1.992;" und findet dort nur noch eine weitere
zu ersetzende Zeichenkette-

Um das von Dir erwartete Ergebnis zu liefern, müßte replace rekursiv
arbeiten, also prüfen, ob nach dem Ersetzen eine Zeichenkette entstanden
ist, in der weitere Ersetzungen möglich sind. Wenn Du so etwas in der
Praxis machen willst, mußt Du das replace innerhalb einer Schleife
nutzen.

Gruß Heiko
--
Jeder Zwang ist Gift für die Seele.
Ludwig Börne

Thomas Barghahn

unread,
Jul 7, 2023, 7:25:34 AM7/7/23
to
*Georg Gruber* meinte:
>
> Ergänzung fehlender Quoten in einer Kursdatei:
>
> RE_Parse ($line, ";([0-9,.]+);", $quote)
> $line = replace ($line, "; ;", ";"+$quote+";", true)
>
> In : 2019-01-29; ; ; ;1.992;
> Out: 2019-01-29;1.992; ;1.992;1.992;

Oder so mit einem Durchlauf:

RE_Parse ($line, ";([0-9,.]+);", $quote)
$line = replace ($line, " ;", $quote + ";", true)

In : 2019-01-29; ; ; ;1.992;
Out: 2019-01-29;1.992;1.992;1.992;1.992;

Thomas 😷
--
== S E N D E Z E I T =====================
  DATUM : Freitag, 07. Juli 2023
  UHRZEIT: 13:25:00 UHR (MESZ)
== Heute: Bundesweiter Tag des Freibads ==

Georg Gruber

unread,
Jul 7, 2023, 5:06:58 PM7/7/23
to
Hab ich zwischezeitlich so realisiert.
Eine Rekursion im replace könnte in ungünstigen Fällen endlos loopen,
wenn ich es mir recht überlege.
Danke für die rasche Antwort.

Georg Gruber

unread,
Jul 7, 2023, 5:12:31 PM7/7/23
to
Am 07.07.2023 um 13:25 schrieb Thomas Barghahn:
> *Georg Gruber* meinte:
>>
>> Ergänzung fehlender Quoten in einer Kursdatei:
>>
>> RE_Parse ($line, ";([0-9,.]+);", $quote)
>> $line = replace ($line, "; ;", ";"+$quote+";", true)
>>
>> In : 2019-01-29; ; ; ;1.992;
>> Out: 2019-01-29;1.992; ;1.992;1.992;
>
> Oder so mit einem Durchlauf:
>
> RE_Parse ($line, ";([0-9,.]+);", $quote)
> $line = replace ($line, " ;", $quote + ";", true)
>
> In : 2019-01-29; ; ; ;1.992;
> Out: 2019-01-29;1.992;1.992;1.992;1.992;

Auch eine Möglichkeit, danke!
0 new messages