CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
11.05.2005, 17:37:13
|
Anfänger
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
TXT(speziell) Datei in MySQL übernehmen
Hallo zusammen,
beschäftige mich seit neustem mit mysql und der möglichkeit Datensätze aus TXT Dateien zu importieren. Hab bisher auch herausgefunden wie es mit gut strukturierten txt-Dateien funktioniert.
Nun hab ich aber ein Problem mit folgender Strukturierung in einer TXT-Datei:
Card Name: Waxmane Baku
Cost: 2W
Type: Creature — Spirit
Pow/Tgh: 2/2
Rules Text: Whenever you play a Spirit or Arcane spell, you may
put a ki counter on Waxmane Baku.
1, Remove X ki counters from Waxmane Baku: Tap X target
creatures.
Set/Rarity: Betrayers of Kamigawa common
(zu finden z.B. unter http://gatherer.wizards.com/default....name&x=49&y=14)
Probleme bereiten mir vor allem der Rules Text da er sich über mehrere Zeilen erstreckt. Dabei kann er auch noch an der Anzahl der Zeilen variieren.
Hat jemand eine Idee wie ich solche Datensätze in MySql einpflegen kann?
Bin für jede Antwort dankbar!
broadcastbenny
Geändert von broadcastbenny (11.05.2005 um 17:39:35 Uhr)
|
11.05.2005, 18:16:49
|
Member
|
|
Registriert seit: Oct 2002
Ort: ch
Beiträge: 822
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
War mal vor genau dem selben problem ;) (-> magictraders.ch hab ich programmiert)
Die Bezeichnungen wie " Card Name: " sind ja konstant, danach kannst du suchen. Erst mal würde ich den ganzen text danach exploden, dann hast du die Einträge schon mal handlich in einem array.
Danach kannst du jedes Array der Reihenfolge des Auftretens der einzelnen Bezeichnungen durchsuchen, und den rest jeweils aufsplitten.
Zum Beispiel suchst du nach "Cost", also strpos($array[$i]," Cost: "); wenn eine -1 zurückgegeben wird, weisst du dass dieses Feld nicht vorkommt und kannst das nächste überprüfen. Somit kannst du den String nach und nach zerstückeln.
Da mein PHP ein bisschen eingerostet ist, könnte es sein, dass die befehle nicht genau so heissen, wie ich sie hinschrieb...
edit: bevor du fragst, nein, meinen Source code zu posten brint nichts, da ich ein export aus MWS benutzt habe zum import und nicht die Daten aus dem gatherer.
Geändert von Gweilo (11.05.2005 um 18:19:21 Uhr)
|
11.05.2005, 21:38:15
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Da sich bestimmte Schlüsselworte ja immer wiederholen, könntest du es wohl recht gut mit preg_match_all() probieren. Falls du noch nie mit regulären Ausdrücken gearbeitet hast, empfehle ich dir das entsprechende Kapitel des Tutorials: http://tut.php-q.net/regex.html
|
11.05.2005, 21:57:59
|
Member
|
|
Registriert seit: Oct 2002
Ort: ch
Beiträge: 822
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Das Problem ist, dass gewisse Schlüsselwörter nicht immer vorkommen müssen, deshalb geht das direkte matchen nicht so leicht.
edit: oh, stimmt gar nicht. Dann gebe ich natürlich xabbuh recht, dann geht es mit preg_match() um einiges einfacher
Geändert von Gweilo (11.05.2005 um 22:02:02 Uhr)
|
11.05.2005, 22:19:41
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Zitat:
Zitat von Gweilo
edit: oh, stimmt gar nicht. Dann gebe ich natürlich xabbuh recht, dann geht es mit preg_match() um einiges einfacher
|
Auch wenn bestimmte Schlüsselwörter nicht jedes Mal vorkommen, sollte das kein Problem sein. Dafür gibt es ja zum Beispiel das Fragezeichen (= {0, 1}).
|
19.05.2005, 21:05:39
|
Anfänger
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Danke an alle für die schnelle Hilfe.
Werd mal schauen was ich daraus machen kann.
Wenn ich ein Ergebnis habe werde ich es auch posten, kann aber dauern weil ich nicht ganz soviel Zeit habe.
Danke
|
31.05.2005, 13:24:42
|
Anfänger
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
So endlich mal Zeit ein Ergebnis zu posten:
PHP-Code:
<?php
define('MYSQL_HOST', 'hostname');
define('MYSQL_USER', 'benutzername');
define('MYSQL_PASS', 'passwort');
define('MYSQL_DATABASE', 'datenbankname');
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
$db_select=mysql_select_db(MYSQL_DATABASE, $db_link);
$filename="test.txt";//Testdatei
$import=fopen($filename,"r");
$read = fread ($import,filesize($filename));
preg_match_all("#(Card Name:)(.*)(Cost:)(.*)(Type:)(.*)(Pow/Tgh:)(.*)(Rules Text:)(.*)(Set/Rarity:)(.*)(\s{2,})#sU",$read, $card);
echo count($card[0]);
for($i=0; $i<=count($card[0]); $i++){
$sql = "INSERT INTO `magickarten` ( `cardnameeng` , `cost` , `type` , `pow` , `rules` , `set` , `cardnamede` , `image` , `rarity` , `id` )
VALUES (
'".$card[2][$i]."', '".$card[4][$i]."', '".$card[6][$i]."', '".$card[8][$i]."', '".$card[10][$i]."', '".$card[12][$i]."', '', '', '', ''
);";
echo $card[2][$i];
echo "<br>";
//$result=mysql_query($sql, $db_link) or die (mysql_error());
};
fclose($import);
?>
Soweit so gut, es funktioniert, nur sollte man wissen welche Dateigrössen der Webserver händeln kann. Bei einer Datei mit ca. 7.000 Datensätzen auf die obere Art und Weise formatiert, gibt mein Webhoster auf und zwar mit der Meldung:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4790109 bytes) in /home/www/web104/html/magic/import.php on line 13
Also bleibt mir nix anderes als die Datei zu stückeln, werds überleben.
Wers gerne Testen möchte hier der Inhalt der Test.txt
PHP-Code:
Card Name: Absorb
Cost: WUU
Type: Instant
Pow/Tgh:
Rules Text: Counter target spell. You gain 3 life.
Set/Rarity: Invasion rare
Card Name: Abu Ja’far
Cost: W
Type: Creature — Leper
Pow/Tgh: 0/1
Rules Text: When Abu Ja’far is put into a graveyard from play,
destroy all creatures blocking or blocked by it. They
can’t be regenerated.
Set/Rarity: Chronicles uncommon, Arabian Nights uncommon
Card Name: Abuna’s Chant
Cost: 3W
Type: Instant
Pow/Tgh:
Rules Text: Choose one — You gain 5 life; or prevent the next 5
damage that would be dealt to target creature this
turn.
Entwine 2 (Choose both if you pay the entwine cost.)
Set/Rarity: Fifth Dawn common
Wer noch einen Tipp hat wie man die Speichergrösse klein halten kann, schreibt einfach hier herein.
Bis dann
Geändert von broadcastbenny (01.06.2005 um 21:47:15 Uhr)
|
03.06.2005, 16:22:52
|
Member
|
|
Registriert seit: Oct 2002
Ort: ch
Beiträge: 822
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
hast du probiert das file zeilenweise auszulesen anstatt es direkt in eine variable zu speichern?
|
05.06.2005, 22:58:21
|
Anfänger
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Zeilenweises auslesen funktioniert meiner Meinung nach nicht, da zu einem bestimmten Datenfeld (z.B. Rules Text) mehrere Zeilen gehören können. Diese würdest du ja durch zeilenweises Auslesen stückeln.
|
05.06.2005, 23:01:52
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: TXT(speziell) Datei in MySQL übernehmen
Zitat:
Zitat von broadcastbenny
Zeilenweises auslesen funktioniert meiner Meinung nach nicht, da zu einem bestimmten Datenfeld (z.B. Rules Text) mehrere Zeilen gehören können. Diese würdest du ja durch zeilenweises Auslesen stückeln.
|
Du könntest dann natürlich einfach überprüfen, ob die Zeile mit Card Name anfängt. Wenn dies der Fall ist, fängt einer neuer Datensatz an, ansonsten gehört die Zeile noch zum vorherigen Datensatz.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:58:52 Uhr.
|