Permalänk

Gemensam h-fil för PHP o C?

Mer frågor...
Sitter med ett C-program som innehåller en hel del header-filer. Sen har jag också en PHP5 installation med en bunt PHP-filer som också har behov av en del av dessa header-filer. Måste sitta nu och manuellt konvertera om till PHP.

Exempel C:
#define TMP_PATH "/HOME/USER/TMP"

och i PHP filen ska det stå:
define("TMP_PATH", "/HOME/USER/TMP");

Finns det nåt knep som ni använder så man slipper denna handpåläggning?

Permalänk

Ett sätt är att skriva gemensamma defines i Excel o sen skriva ett Excel-macro som skapar två olika filer...

Permalänk
Medlem

Annars har du ju getenv()
Exportera variablerna och hämta dom därifrån.

Permalänk
Skrivet av acura:

Annars har du ju getenv()
Exportera variablerna och hämta dom därifrån.

Aaa...nåt att läsa på om. Det är en funktion jag aldrig använt.
Tack!

Permalänk
Skrivet av Sweedland:

Aaa...nåt att läsa på om. Det är en funktion jag aldrig använt.
Tack!

Det finns många verktyg i denna familj av funktioner kan jag läsa. Att "exportera" en del nycklar görs med putenv(). Det är ju en enkel engångssak.
Sen kan setenv() användas.

Permalänk
Hedersmedlem

Om alla defines följer ett simplare mönster som ditt exempel så kan man skapa ett verktyg för att konvertera dem automatiskt ganska enkelt.
Det som behövs (för min lösning) är ett Linux/*nix/kompatibelt shell (Linux/*BSD/OS X/Windows med Windows Subsystem for Linux installerat).

Exempelvis, om vi har följande i test.h:
#define TEST_A "/home/user/tmp"
#define MIN_DEFINE_2 "..."
#define ABC 123

så kan man köra

cat test.h | perl -nE '/^#define ([^ ]+) "?([^\r\n"]+)"?/mg && say "define(\"$1\", \"$2\");"'

och få tillbaka

define("TEST_A", "/home/user/tmp");
define("MIN_DEFINE_2", "...");
define("ABC", "123");

Kan bli strul t ex om det är escape:ade citattecken i define-strängarna.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Skrivet av Thomas:

Om alla defines följer ett simplare mönster som ditt exempel så kan man skapa ett verktyg för att konvertera dem automatiskt ganska enkelt.
Det som behövs (för min lösning) är ett Linux/*nix/kompatibelt shell (Linux/*BSD/OS X/Windows med Windows Subsystem for Linux installerat).

Exempelvis, om vi har följande i test.h:
#define TEST_A "/home/user/tmp"
#define MIN_DEFINE_2 "..."
#define ABC 123

så kan man köra

cat test.h | perl -nE '/^#define ([^ ]+) "?([^\r\n"]+)"?/mg && say "define(\"$1\", \"$2\");"'

och få tillbaka

define("TEST_A", "/home/user/tmp");
define("MIN_DEFINE_2", "...");
define("ABC", "123");

Kan bli strul t ex om det är escape:ade citattecken i define-strängarna.

Bra! Jag gillar detta! Alla #defines är enkla utan specialtecken å sånt. Du nyttjar alltså Perl? Jag har de delar jag behöver för att åstadkomma detta.
Jag ska analysera parametrarna. Jag anar vad 'say' står för...