Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei VBA in PHP konvertieren
Hallo Forumler!
Habe den Code einer VBA Funktion und bräuchte diesen umgeschrieben als PHP Funktion, kenne mich dafür aber leider zu wenig aus mit beiden Programmiersparchen und würde mich daher freuen, wenn mir hier jemand weiterhelfen könnte :rolleyes:
Hatte auch schon emsig gegooglet, ob es hierfür ja vielleicht ein Programm gegeben hätte, das so was automatisch macht, hab aber leider nix gefunden :(
Der VBA Code sieht so aus:
Private Function all_variations(Zeichenmenge As String, laenge As Integer) As String()
Dim menge_tmp As Variant
Dim gesamtmenge() As String
Dim wort As Variant
Dim zeichen As Variant
Dim i As Integer, j As Integer
ReDim gesamtmenge((Len(Zeichenmenge) ^ laenge) - 1)
If laenge > 1 Then
i = 0
menge_tmp = all_variations(Zeichenmenge, laenge - 1)
For j = 1 To Len(Zeichenmenge)
For Each wort In menge_tmp
gesamtmenge(i) = Mid(Zeichenmenge, j, 1) & wort
i = i + 1
Next wort
Next j
Else
' Länge = 1, Gesamtmenge ist Zeichenmenge^1 groß = len(Zeichenmenge)
For i = 1 To Len(Zeichenmenge)
gesamtmenge(i - 1) = Mid(Zeichenmenge, i, 1)
Next i
End If
all_variations = gesamtmenge
End Function
Ja und umgewandelt sollte das ne PHP Funktion alla
function Schreibweisen() {
...
...
...
}
werden.
Würde mich wirklich sehr freuen, wenn mir da jamand weiterhelfen könnte auf die Schnelle.
Viele Grüße
Elliot
Ist leider das falsche Forum, daher verschieb ich es mal.
Peter
PS: Wenn du bereit bist, dafür Geld auszugeben, so poste das bei den Jobangeboten (http://www.php-resource.de/jobs/)
fireweasel 01-05-2010, 21:22 Welche Art von Strings möchtest du verarbeiten?
PHP-Strings können nicht mit Unicode umgehen.
Man muss dafür Erweiterungen benutzen, die nicht in jeder PHP-Installation vorhanden sind.
Das würde die Sache verkomplizieren.
Hallo fireweasel,
danke erstmal für deine Antwort :)
Mh, da fragst du mich jetzt aber was. Ich hab mal bei meinem Hoster (hosteurope.de) nachgeschaut und dort läuft die PHP-Version 5.2.12 (Zend: 2.2.0).
Hilft das dir evtl. weiter? Wäre natürlich gut, wenn das dann schon irgendwie universell programmiert wäre auch für PHP 4, weil wer weiss, wenn man mal den Hoster wechseln müsste.
Gruß
Elliot
PHP 4 ist seit fast 2 Jahren offiziell tot. Es ist sehr leichtsinnig ein System zu verwenden, bei dem 2 Jahre keine Sicherheitsupdates eingespielt wurden und sowas sollte man auch nicht unterstützen.
@h3ll
Wenn das so ist, dann gebe ich dir natürlich vollkommen Recht. Kenne mich da zu wenig aus und dachte, dass die vielleicht immer noch verwendet wird, weil ich schon öfter mal was von Version 4 gelesen hatte.
Klar, wenn die dann eh nicht mehr eingesetzt wird, müsste das auch nicht kompatibel für PHP 4 geschrieben sein.
Gruß
Elliot
Wenn das so ist, dann gebe ich dir natürlich vollkommen Recht. Kenne mich da zu wenig aus und dachte, dass die vielleicht immer noch verwendet wird, weil ich schon öfter mal was von Version 4 gelesen hatte.
Klar, wenn die dann eh nicht mehr eingesetzt wird, müsste das auch nicht kompatibel für PHP 4 geschrieben sein.
Sicher wird PHP 4 noch eingesetzt. Aber nur von Leuten, die
a) keine Ahnung haben
oder
b) denen das Risiko egal ist.
fireweasel 02-05-2010, 20:45 ... Ich hab mal bei meinem Hoster (hosteurope.de) nachgeschaut und dort läuft die PHP-Version 5.2.12 (Zend: 2.2.0).
Hilft das dir evtl. weiter? ...
Nicht wirklich. Hilfreicher wäre gewesen, per PHP-Info nachzuprüfen, ob die mbstring- oder die iconv-Erweiterung installiert sind. Aber deine Funktion scheint auch mit Single-Byte-Kodierung auszukommen. Also stellt das kein Problem dar.
Wäre natürlich gut, wenn das dann schon irgendwie universell programmiert wäre auch für PHP 4, weil wer weiss, ...
Ich sehe jetzt da nichts, was in PHP4 und PHP5 unterschiedlich gehandhabt werden müsste. Die beiden Versionen unterscheiden sich vor allem im Bereich objekt-orientierte Programmierung. Die wird hier nicht gebraucht.
Hast du mal ein paar Beispiel-"Zeichenmengen" und die passenden Rückgabewerte, die deine Originalfunktion dazu liefert?
Ich habe zwar auf die Schnelle eine Umsetzung gebaut, aber die macht nicht ganz das, was ich mir vorgestellt hatte.
// dies ist quasi eine 1-zu-1-Umsetzung,
// einigen VB-Unsinn kann man in PHP weglassen,
// aber erstmal muss das richtig funktionieren ...
function all_variations(
$zeichenmenge,
$laenge
) {
$menge_tmp = '';
$gesamtmenge = '';
$wort = '';
//$zeichen = '';
$i = 0; $j = 0;
// ReDim gesamtmenge((Len(Zeichenmenge) ^ laenge) - 1
if ($laenge > 1) {
$i = 0;
$menge_tmp = all_variations($zeichenmenge, $laenge - 1);
for ($j = 0; $j < strlen($zeichenmenge); ++$j) {
//foreach ($menge_tmp as $wort) {
for ($k = 0; $k < strlen($menge_tmp); ++$k) {
$wort = $menge_tmp[$k];
//$gesamtmenge($i) = substr($zeichenmenge, $j, 0) . $wort;
$gesamtmenge = substr_replace(
$gesamtmenge,
substr($zeichenmenge, $j, 1) . $wort,
$i
);
$i = $i + 1;
}
}
}
else {
// Länge = 1, Gesamtmenge ist Zeichenmenge^1 groß = len(Zeichenmenge)
for ($i = 0; $i < strlen($zeichenmenge); ++$i) {
//$gesamtmenge($i - 1) = substr($zeichenmenge, $i, 1);
$gesamtmenge = substr_replace(
$gesamtmenge,
substr($zeichenmenge, $i, 1),
$i - 1
);
}
}
return $gesamtmenge;
}
Für all_variations('abc', 3) gibt es 'aaaaaaabbbbbbbcccccccc' als Rückgabewert. Das kann nicht so gewollt sein. ;) Ich hätte mir eher sowas wie 'aaaaabaacabaabbabcacaacbacc[...]ccc' vorgestellt ...
Möglicherweise hab ich auch die Stellen mit substr_replace(..., substr()) falsch umgesetzt. PHP zählt Zeichenpositionen Null-basiert, VB ist da anderer Meinung.
Hallo fireweasel,
echt nett von dir, dass du mir da weiterhilfst :)
Also die Funktion soll mir alle erdenklichen Schreibweisen einer Wort- bzw. Zeichenkombination zurückgeben. Ich geb dir am besten mal ein Beispiel:
Angenommen ich übergebe der Funktion folgendes:
HL 1040 D e
Dann soll mir die Funktion zurückgeben:
HL 1040 De,HL 1040D e,HL 1040De,HL1040 D e,HL1040 De,HL1040D e,HL1040De
Egal also was ich der Funktion als Wert übergebe, sie soll mir immer alle möglichen Schreibweisen zurückliefern. Das oben war jetzt wie gesagt nur ein Beispiel, die Zeichenkombination könnte auch größer oder kleiner sein, wie z.B nur HL 5500 e
Es wäre jetzt aber nicht schlimm und sogar wünschenswert, wenn der eigentliche Begriff (im Beispiel HL 1040 D e) auch nochmal im Rückgabewert enthalten wäre, was die VBA-Funktion - wie man oben am erstellten Beispiel auch sieht - nicht macht.
Hoffe ich hab das einigermaßen verständlich erklärt und du weißt, was ich meine. Wenn nicht, einfach nochmal nachfragen.
Ansonsten sieht die Funktion schonmal nicht schlecht aus :) Ich denke, ihr müsste aber wohl nur ein einziger Wert übergeben werden, die "3" in deinem Beispiel könnte dann wohl entfallen?
Ich habe die Funktion übrigens auch mal in Perl geschrieben gekriegt, vielleicht kannst du da mehr rauslesen? Für mich ist der Perl Code aber nochmal einen drauf und absolut Böhmische Dörfer ;)
Grüße
Elliot
AmicaNoctis 03-05-2010, 00:34 Hallo elliot,
meinst du sowas wie in diesem Thread? http://www.php-resource.de/forum/php-developer-forum/98693-funktion-fuer-wortvarianten.html#post634315
Gruß,
Amica
@AmicaNoctis
Ja, so wie das aussieht, kommt das der Sache ziemlich nah. Allerdings bräuchte ich das ohne array, also so:
$begriff = "HL 1040 D e";
$ergebnis = all_variations($begriff);
Wenn ich dann $ergebnis ausgeben lassen würde, sollte das raus kommen:
HL 1040 D e,HL 1040 De,HL 1040D e,HL 1040De,HL1040 D e,HL1040 De,HL1040D e,HL1040De
Gruß
Elliot
Allerdings bräuchte ich das ohne array
Ja dann erzeugst du aus dem Array halt deine gewünschte Ausgabe, bspw. per implode ...
@wahsaga
Wenn ich wüsste wie das ginge, hätte ich ja dieses Thema nicht eröffnet ;)
Ich kenne mich "leider" in VB noch in PHP sonderlich gut aus :(
Deshalb bräuchte ich sozusagen halt was Mundfertiges für Dummies ;)
Gruß
Elliot
AmicaNoctis 03-05-2010, 12:51 Deshalb bräuchte ich sozusagen halt was Mundfertiges für Dummies ;)
Da du damit leider nicht das PHP Handbuch mit seinen vielen Beispielen und Anwenderkommentaren zu meinen scheinst, solltest du dir dessen bewusst sein, dass Anfänger die nach kostenlosem, fertigem Code fragen immer etwas wie Schnorrer wirken.
Ich habe die in dem anderen Thread beschriebene Funktion in der Schublade liegen, bin aber irgendwie gerade nicht überzeugt, warum ich sie dir schenken sollte. Du kannst ja mal versuchen, die Beschreibungen aus dem anderen Thread umzusetzen und deinen Code zu posten. Dann helfe ich dir damit. So hättest du wenigstens selbst auch was dazugetan und nochwas dabei gelernt.
Gruß,
Amica
@AmicaNoctis
Also ein Schnorrer bin ich mal auf gar keinen Fall, auch wenn das jetzt so den Eindruck auf dich haben sollte! Meine tägliche Arbeitszeit beträgt nebenbei bemrekt im Schnitt übrigens an die 12 Stunden...muss mir da also wirklich nicht nachsagen lassen, dass ich bequem bin.
Wenn ich etwas dazu beitragen könnte, dann würde ich das defintiv auch tun !!! Ich bin aber nunmal kein Programmierer und brauche PHP-Kentnisse in meinem Beruf nicht, weshalb es für mich in diesem Fall einfach in keinem Verhälnis stehen würde, mich wie lange hinzusetzen und PHP zu lernen, nur um jetzt diese an sich kleine Funktion zu schreiben. Und was man nicht braucht, vergißt man dann bekanntlich auch wieder ziemlich schnell.
Deshalb hab ich mir hier im Forum Hilfe gesucht, weil es Leute gibt, die das gelernt haben und das viel viel besser können als ich. Wobei aber ja keiner gezwungen ist mir zu helfen und ich verlange das auch nicht.
Gruß
Elliot
AmicaNoctis 03-05-2010, 14:50 Dann ist ja gut. Das war ja nur ganz allgemein gesprochen. Ich finde, es macht einen Unterschied, ob man in einem Backwarenforum nach Hilfe fragt, weil der Teig nicht richtig aufgeht oder ob man täglich frische Brötchen zugeschickt bekommen will. In einem Programmierforum mache ich da keine Unterschiede: Hilfe ja, fertige Lösungen nein, denn das ist eine Dienstleistung, mit der ich als Selbstständige meinen Lebensunterhalt verdiene.
Da viele andere das genauso sehen, bzw. in der selben Situation sind, gibt es in diesem Forum üblicherweise Hilfe zur Selbsthilfe. Wenn das dem Fragesteller aufgrund des eigenen Kenntnisstandes nicht weiterhilft, sollte er IMHO darüber nachdenken, Geld dafür auszugeben und das Anliegen als Jobangebot zu announcieren.
Das meine ich auch gar nicht böse, aber so sehe ich die Welt.
Gruß,
Amica
@AmicaNoctis
Im Großen und Ganzen gebe ich dir da schon Recht, so wie du das siehst. Allerdings ist es bei mir ja nicht so, dass ich "täglich" frische Brötchen zugeschickt haben möchte. Wie du ja siehst, bin ich hier bereits schon seit 2002 angemeldet und die Anzahl meiner Beiträge dürften schon Rückschlüsse zulassen, ob ich einer von der oder der Sorte bin.
Gruß
Elliot
P.S.: ....e :)
AmicaNoctis 03-05-2010, 15:41 dass ich "täglich" frische Brötchen zugeschickt haben möchte.
Das ist das Problem bei Code, der funktioniert immer wieder, wenn man ihn einmal hat. ;)
|
-
- |