php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.01.2007, 13:45  
Erfahrener Benutzer
 
Registriert seit: 16.08.2004
Beiträge: 145
DDogg
Standard Mit PHP am Ende einer TXT was ergänzen / Leerzeilen löschen

Hallo liebes Lieblingsforum

Ich arbeite an einer Datenbank für Basketballstatistiken. Dazu hole ich
mir täglich die sogenannten Boxscores aus dem Internet und konvertiere
Sie um sie per txt in die DB hochzuladen. Das ist langwierig und ätzend!


Deswegen will ich jetzt ein Script schreiben das mir das ganze Suchen
und ersetzen abnimmt

Die Rohdaten, die ich in meinen HTML Editor reinkopiere sehen so aus:


PHP-Code:
Al HarringtonFC    36    4-12    0-3    5-6    3    5    8    2    2    1    3    4    13
Stephen Jackson
GF    23    2-7    0-0    2-2    0    2    2    1    0    0    2    4    6
Adonal Foyle
C    14    2-2    0-0    0-0    1    0    1    0    0    1    0    2    4
Monta Ellis
G    28    3-10    0-3    5-5    1    2    3    1    0    0    4    2    11
Baron Davis
PG    37    7-18    1-7    6-6    1    4    5    8    1    2    5    2    21
BENCH     MIN     FGM
-A     3PM-A     FTM-A     OREB     DREB     REB     AST     STL     BLK     TO     PF     PTS
Mickael Pietrus
GF    25    2-8    0-3    7-10    1    1    2    0    1    1    2    2    11
Andris Biedrins
FC    22    6-9    0-0    0-0    2    6    8    0    0    2    0    3    12
Matt Barnes
SF    20    2-4    0-1    1-2    0    2    2    0    0    0    1    3    5
Sarunas Jasikevicius
PG    9    0-2    0-2    0-0    0    0    0    1    0    0    2    1    0
Josh Powell
F    18    2-3    0-0    3-4    1    1    2    1    0    0    1    3    7
Kelenna Azubuike
SG    9    1-1    1-1    4-4    0    2    2    0    1    1    0    2    7
TOTALS        FGM
-A     3PM-A     FTM-A     OREB     DREB     REB     AST     STL     BLK     TO     PF     PTS
    31
-76    2-20    33-39    10    25    35    14    5    8    20    28    97
    40.8
%    10.0%    84.6%    Team TO (pts off): 20 (22)
 
CLEVELAND CAVALIERS
STARTERS     MIN     FGM
-A     3PM-A     FTM-A     OREB     DREB     REB     AST     STL     BLK     TO     PF     PTS
Sasha Pavlovic
GF    38    7-11    2-3    8-10    1    2    3    3    0    0    2    4    24
Drew Gooden
PF    26    5-12    0-0    1-2    3    2    5    0    3    0    1    2    11
Zydrunas Ilgauskas
C    24    5-5    0-0    4-6    2    8    10    4    1    0    2    2    14
Larry Hughes
SG    25    3-9    0-0    5-5    1    3    4    2    2    0    0    1    11
Daniel Gibson
G    25    4-7    4-5    0-1    0    3    3    2    0    0    2    3    12
BENCH     MIN     FGM
-A     3PM-A     FTM-A     OREB     DREB     REB     AST     STL     BLK     TO     PF     PTS
Damon Jones
PG    15    4-6    2-4    0-0    0    0    0    4    1    0    2    2    10
Donyell Marshall
F    15    6-10    2-5    1-1    1    4    5    1    2    0    2    5    15
Anderson Varejao
F    21    4-9    0-0    1-3    2    5    7    1    1    1    1    2    9
Eric Snow
PG    16    0-4    0-0    1-2    0    1    1    6    2    1    2    3    1
David Wesley
SG    26    3-9    2-5    3-3    2    3    5    3    0    1    1    1    11
Dwayne Jones
FC    5    0-0    0-0    3-4    0    1    1    0    0    0    0    0    3
Scot Pollard
C    5    1-3    0-0    1-2    4    0    4    0    0    0    0    0    3 

Nun hab ich folgende Datei die mir die Arbeit abnimmt:

PHP-Code:
<?php
$Datum 
'2007-01-30';
$txt '.txt';
$Datei $Datum.$txt;
$fp=fopen($Datei,"r+");

$var = array('\'' => '''        ' => ';',', ' => ';','Abdur-Rahim' => 'AbdurRahim','-' => ';',' ' => ';','TOTALS;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','STARTERS;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','BENCH;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '',' ' => 'DATUMASAUSGABE');

$file=implode("",file("$Datei"));

$berichtigter_text str_replace(array_keys($var), array_values($var),$file);

$filename $Datei;
$somecontent $berichtigter_text;

if (
is_writable($filename)) {

   if (!
$handle fopen($filename"w")) {
         print 
"Kann die Datei $filename nicht öffnen";
         exit;
   }
   if (!
fwrite($handle$somecontent)) {
       print 
"Kann in die Datei $filename nicht schreiben";
       exit;
   }
   print 
"Fertig, in Datei $filename geschrieben

"
;

   
fclose($handle);

} else {
   print 
"Die Datei $filename ist nicht schreibbar";
}

   
$text file($Datei);

  for(
$i=0$i<count($text); $i++)
    {
    if(
$text[$i] <> '')
    {echo 
"$text[$i] 
"
;}
    }

?>
Heraus kommen diese Daten:

PHP-Code:
Al;Harrington;FC;36;4;12;0;3;5;6;3;5;8;2;2;1;3;4;13
Stephen
;Jackson;GF;23;2;7;0;0;2;2;0;2;2;1;0;0;2;4;6
Adonal
;Foyle;C;14;2;2;0;0;0;0;1;0;1;0;0;1;0;2;4
Monta
;Ellis;G;28;3;10;0;3;5;5;1;2;3;1;0;0;4;2;11
Baron
;Davis;PG;37;7;18;1;7;6;6;1;4;5;8;1;2;5;2;21

Mickael
;Pietrus;GF;25;2;8;0;3;7;10;1;1;2;0;1;1;2;2;11
Andris
;Biedrins;FC;22;6;9;0;0;0;0;2;6;8;0;0;2;0;3;12
Matt
;Barnes;SF;20;2;4;0;1;1;2;0;2;2;0;0;0;1;3;5
Sarunas
;Jasikevicius;PG;9;0;2;0;2;0;0;0;0;0;1;0;0;2;1;0
Josh
;Powell;F;18;2;3;0;0;3;4;1;1;2;1;0;0;1;3;7
Kelenna
;Azubuike;SG;9;1;1;1;1;4;4;0;2;2;0;1;1;0;2;7

;31;76;2;20;33;39;10;25;35;14;5;8;20;28;97
;40.8%;10.0%;84.6%;Team;TO;(pts;off):;20;(22)

CLEVELAND;CAVALIERS

Sasha
;Pavlovic;GF;38;7;11;2;3;8;10;1;2;3;3;0;0;2;4;24
Drew
;Gooden;PF;26;5;12;0;0;1;2;3;2;5;0;3;0;1;2;11
Zydrunas
;Ilgauskas;C;24;5;5;0;0;4;6;2;8;10;4;1;0;2;2;14
Larry
;Hughes;SG;25;3;9;0;0;5;5;1;3;4;2;2;0;0;1;11
Daniel
;Gibson;G;25;4;7;4;5;0;1;0;3;3;2;0;0;2;3;12

Damon
;Jones;PG;15;4;6;2;4;0;0;0;0;0;4;1;0;2;2;10
Donyell
;Marshall;F;15;6;10;2;5;1;1;1;4;5;1;2;0;2;5;15
Anderson
;Varejao;F;21;4;9;0;0;1;3;2;5;7;1;1;1;1;2;9
Eric
;Snow;PG;16;0;4;0;0;1;2;0;1;1;6;2;1;2;3;1
David
;Wesley;SG;26;3;9;2;5;3;3;2;3;5;3;0;1;1;1;11
Dwayne
;Jones;FC;5;0;0;0;0;3;4;0;1;1;0;0;0;0;0;3
Scot
;Pollard;C;5;1;3;0;0;1;2;4;0;4;0;0;0;0;0;
Soweit, sogut.

Was ich nicht schaffe, ist am Ende jeder Zeile ein Datum (2007-01-30)
einzufügen und die Leerzeilen zu löschen!

Denn am Ende muss das ganze so aussehen:

...
Daniel;Gibson;G;25;4;7;4;5;0;1;0;3;3;2;0;0;2;3;12; 2007-01-30;;
Damon;Jones;PG;15;4;6;2;4;0;0;0;0;0;4;1;0;2;2;10;2 007-01-30;;
...

Kann mir jemand dabei helfen? Ich hab keine Ahnung wie ich etwas am
Ende der Zeilen ergänzen kann
DDogg ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.01.2007, 14:05  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
der Test auf den Leerstring klappt nicht, weil file() die Zeilenumbrüche ans Ende jedes Elementes hängt (deshalb kommt bei implode("", file(..)) auch nicht eine einzeilige Textwurst heraus, sondern wieder das Original).

Das zu wissen ist schon einmal Schritt 1.
Weiter könnte es so gehen:

PHP-Code:
<?php
$aFile 
= array(); // der neue Dateiinhalt
foreach (file($Datei) as $sLine) {
  
$sLine trim($sLine);
  if (!empty(
$sLine)) {  // nur wenn was drinne steht übernehmen
    
$aFile[] = $sLine ';' date('Y-m-d'); // und Datum anfügen
  
}
}
file_put_contents($Dateiimplode("\n"$aFile)); // file_put_contents() gibts erst ab PHP5, sonst Datei eben anders schreiben (fopen)
?>
Kleine Anmerkung noch:
Eigentlich liegt ja bereits eine CSV-Datei vor (Tabulator-separiert wenn ich das richtig sehe). Es ist etwas unüblich, durch str_replace() da herumzuersetzen.

Schau dir doch mal fopen() und fget_csv() an. Wenn du das Komma wegbekommen möchtest, kannst du entweder rtrim($sString, ',') verwenden, oder substr().

Wenn du dann dieses CSV-File in MySQL importieren möchtest, kannst du diesem auch mitteilen, dass das Trennzeichen ein Tabulator ist ("\t").
Zergling-new ist offline  
Alt 31.01.2007, 16:46  
Erfahrener Benutzer
 
Registriert seit: 16.08.2004
Beiträge: 145
DDogg
Standard

Danke für die Antwort.

Ich habe es nicht so umgesetzt, aber ich hab mir überleg das ich die TExtdatei garnichtmehr brauche. Ich will es ja eh in die DB reinschreiben, also warum den umweg über eine txt gehen? ...

explode war da meine Rettung

PHP-Code:
<?php

include("../shared.php");
connect();

$txt '.txt';
$Datei $Datum.$txt;
$fp=fopen($Datei,"r+");

$var = array('\'' => '''        ' => ';',', ' => ';','Abdur-Rahim' => 'AbdurRahim','-' => ';',' ' => ';','TOTALS;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','STARTERS;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','BENCH;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','%' => '''(' => ''')' => '');

$file=implode("",file("$Datei"));

$berichtigter_text str_replace(array_keys($var), array_values($var),$file);

$filename $Datei;
$somecontent $berichtigter_text;

if (
is_writable($filename)) {

   if (!
$handle fopen($filename"w")) {
         print 
"Kann die Datei $filename nicht öffnen";
         exit;
   }
   if (!
fwrite($handle$somecontent)) {
       print 
"Kann in die Datei $filename nicht schreiben";
       exit;
   }
   print 
"";

   
fclose($handle);

} else {
   print 
"Die Datei $filename ist nicht schreibbar";
}

   
$text file($Datei);

  for(
$i=0$i<count($text); $i++)
    {
    
$sem ';';
    
$null '0';
    
$werte substr($text[$i], 0, -2);
    
$line "$werte$sem$Datum$sem$null$sem";



$data "$line";
list(
$Vorname$Nachname$POS$MIN$FGM$FGA$TPM$TPA$FTM$FTA$OREB$DREB$REB$AST$STL$BLK$TO$PF$PTS$Date$fgp) = explode(";"$data);

if (
$Date)
{
    
$sql4 "INSERT INTO dailyscores SET Vorname = '$Vorname', Nachname = '$Nachname', POS = '$POS', MIN = '$MIN', FGM = '$FGM', FGA = '$FGA', TPM = '$TPM', TPA = '$TPA', FTM = '$FTM', FTA = '$FTA', OREB = '$OREB', DREB = '$DREB', REB = '$REB', AST = '$AST', STL = '$STL',BLK = '$BLK', PF = '$PF', PTS = '$PTS', Date = '$Date', fgp = '$fgp'";
$res4 send_sql($sql4);

   echo 
"$line
"
;
}
   }

?>

Ist sicher sehr eigenwillig gelöst. Geht bestimmt auch besser und einfacher. Aber es geht, ich habs (fast) alleine gemacht, passt schon

Allerdings will ich auch lernen wies richtig geht, also las ich mich auch sehr gerne belehren wie man das ganze richtig gemacht hätte!
DDogg ist offline  
Alt 31.01.2007, 17:59  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

"schön" wäre mit ner reg_ex die webseite direkt auszulesen und die daten in der db speichern ^^
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 31.01.2007, 18:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wo kommen die Rohdaten denn her?
Zergling-new ist offline  
Alt 01.02.2007, 10:32  
Erfahrener Benutzer
 
Registriert seit: 16.08.2004
Beiträge: 145
DDogg
Standard

Zitat:
Zitat von phpdummi
"schön" wäre mit ner reg_ex die webseite direkt auszulesen und die daten in der db speichern ^^
Das wäre ein Traum. Einfach nur das Script aufrufen und zapp zarapp ist die Datenbank gefüllt.

Die Rohdaten kommen von www.espn.com, genauer von http://scores.espn.go.com/nba/scoreboard

Das schwierige ist allerdings das die Ergebnisse auf viele verschiedene Seiten aufgeteilt sind.


...

So, hab jetzt 4 Stunden programmiert. Das ganze läuft jetzt so:

Man gibt folgende URL als Ziel ein:

http://scores.espn.go.com/nba/scoreboard?date=20070129

Als date gibt man das gewünschte Datum ein.

Das Script sucht auf der entsprechende Seite alle GameIDs raus.

Die GameIDs sind sozusagen die Links zu den Statistiken.

Dann nimmt sich das Script jede Seite ->

http://scores.espn.go.com/nba/boxscore?gameId=GAMEID

vor, liest die dortigen Stats aus, zerhackt, zerstückelt, zerlegt, sortiert sie , versieht sie mit dem jeweiligen Datum, schreibt Sie in meine Datenbank, rechnet sogenannte ManagerPunkte aus, backt einen Mohnkucken, räumt die Spühlmaschiene ein und erobert die Weltherschaft.

Theoretisch muss ich dann einfach nur immer eine Zeitspanne eingeben, sagen wir
2006-10-31 (Saisonstart)
bis
Heute
oder
2007-06-25 (Saisonende)

und ich habe dann durch simples aufrufen des Scripts alle Statistiken die ich brauche um alles erdenkliche anzustellen.

Mal unter uns, das ist der helle Wahnsinn



Ist das eigentlich legal??

Ich bin jetzt soweit das er mir alle Stats in meine DB einträgt. Aber nur wenn ich als URL die jeweilige GameID Seite angeben.

Ich muss es jetzt noch schaffen das er von selbst die GameID nach eingabe eines Datums ausliest, und dann alle Stats des Tages einpflegt.

Wenn das steht muss ich nur noch programmieren das ich das Datum nicht mehr eingeben muss, sonders das er nur das heutige Datum einpflegt. Da die Spiele in Amerika sind muss ich durch den Zeitunterscheid einfach eine Zeit mit angeben. Jeden Tag um 04:00 Morgens, wenn espn alle Stats hat, läuft das script automatisch an, und ich hab sofort alle Stats mundgerecht serviert. Ich muss nichtmal was machen.

DDogg ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ende Array erreicht? krackmoe PHP Tipps 2008 16 30.07.2008 19:04
Problem mit DIV -Bild soll am unteren Ende der Seite bleiben scheibo HTML, Usability und Barrierefreiheit 16 12.01.2006 16:54
neue datensätze am ende anfügen? Dilandau Datenbanken 3 12.12.2005 22:47
Am Ende jeder Zeile etwas einfügen lassen... PHP Tipps 2005-2 2 29.10.2005 05:56
Layer am Ende einer Seite platzieren php1 HTML, Usability und Barrierefreiheit 2 21.03.2005 22:44
datensatz am ende einfügen....??? ckrentel PHP Tipps 2005 8 20.03.2005 21:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php am ende löschen, php div ans ende einfügen, php script txt file ergänzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.