Gå til innhold

Tabeller fra text fil.


Anbefalte innlegg

Hei, lurte på hvordan koden blir hvis:

jeg skal hente fram et kart fra en text fil. også skal text filen blir vist med tabeller.

 

map.txt

 

#######

#-ccc-#

#sssss#

#-----#

#sssss#

#######

 

# = <td bgcolor="#000000"><td>

- = <td bgcolor="#FFFFFF"><td>

c = <td bgcolor="#0000FF"><td>

s = <td bgcolor="#FF0000"><td>

 

-wacie

Lenke til kommentar
Videoannonse
Annonse

Noe á la dette?

$map = file( 'map.txt' );

$retval = "<table>";

foreach ( $map as $line ) {

 $retval .= "<tr>";
 for( $i = 0; $i < strlen( $line ) + 1; $i++ ) {
 
  $char = $line{$i};
 
  switch ( $char ) {
 
   case "#":
    $retval .= "<td bgcolor=\"#000000\">#</td>";
   break;
  
   case "-":
    $retval .= "<td bgcolor=\"#FFFFFF\">-</td>";
   break;
  
   case "c":
    $retval .= "<td bgcolor=\"#0000FF\">c</td>";
   break;
  
   case "s":
    $retval .= "<td bgcolor=\"#FF0000\">s</td>";
   break;
 
  }

 }

 $retval .= "</tr>\n";


}

$retval .= "</table>";

Lenke til kommentar

Du kan bytte ut hele switch-setningen din med en rekke str_replace()-kall, som Lokaltog prøvde å si.

 

$retval = str_replace("#", "<td bgcolor=\"#000000\"><td>", $retval);
$retval = str_replace("-", "<td bgcolor=\"#FFFFFF\"><td>", $retval);
$retval = str_replace("c", "<td bgcolor=\"#0000FF\"><td>", $retval);
$retval = str_replace("s", "<td bgcolor=\"#FF0000\"><td>", $retval);

 

Er dog litt usikker på om du kanskje må escape # i strengen som skal settes inn.

Lenke til kommentar
Du kan bytte ut hele switch-setningen din med en rekke str_replace()-kall, som Lokaltog prøvde å si.

 

$retval = str_replace("#", "<td bgcolor=\"#000000\"><td>", $retval);
$retval = str_replace("-", "<td bgcolor=\"#FFFFFF\"><td>", $retval);
$retval = str_replace("c", "<td bgcolor=\"#0000FF\"><td>", $retval);
$retval = str_replace("s", "<td bgcolor=\"#FF0000\"><td>", $retval);

 

Er dog litt usikker på om du kanskje må escape # i strengen som skal settes inn.

For å speede opp hele prosessen kan du også la vær å bruke dobbeltfnutter ("), siden det ikke er nødvendig i dette tilfellet. PHP slipper å søke etter variabler i de strengene, og du slipper å escape 10 dobbeltfnutter i HTML-koden du skal printe. I tillegg kan det være lurt å ha innhold i tabellcellene slik at de synes, slik:

<?php
$retval = str_replace('#', '<td bgcolor="#000000"> <td>', $retval);
$retval = str_replace('-', '<td bgcolor="#FFFFFF"> <td>', $retval);
$retval = str_replace('c', '<td bgcolor="#0000FF"> <td>', $retval);
$retval = str_replace('s', '<td bgcolor="#FF0000"> <td>', $retval);
?>

 

:thumbup:

Lenke til kommentar
Ang. hastighet: Tror ikke hastighetsforskjellen mellom " og ' er så voldsomt stor, med mindre du kjører det i en while-løkke som er stor nok til å pushe sidegenereringstiden over 10-20 sekunder.

Riktig det. Men uansett, er ålreit å legge seg til vanen.. Jeg blir iallefall fryktelig lei av å escape HTML-kode. :)

Lenke til kommentar

Vil si det er lettere å gjøre (f.eks.) slik:

 

echo "<a href=\"$var\">$var2</a>";

 

enn

 

echo '<a href="' . $var . '">' . $var2 . '</a>';

 

uansett hvor mye raskere det enn er.

 

Vil si det er viktigere å skrive på en måte man selv finner lett, enn at sidegenereringstiden går ned med 1ms eller så.

Endret av jorgis
Lenke til kommentar

for å gjøre koden kjappere kan man istedet skrive:

<?php

$from = array('#', '-',' 'c','s');
$to = array('<td bgcolor="#000000"> <td>',
                  '<td bgcolor="#FFFFFF"> <td>',
                  '<td bgcolor="#0000FF"> <td>',
                   '<td bgcolor="#FF0000"> <td>'

);

$retval = str_replace($from, $to, $retval);
?>

:thumbup:

Lenke til kommentar

når jeg prøvde :

 

<?

$map = file( 'map.txt' );

$retval = "<table>";

foreach ( $map as $line ) {

$retval .= "<tr>";
for( $i = 0; $i < strlen( $line ) + 1; $i++ ) {

 $char = $line{$i};

 switch ( $char ) {

  case "#":
   $retval .= "<td bgcolor=\"#000000\">#</td>";
  break;

  case "-":
   $retval .= "<td bgcolor=\"#FFFFFF\">-</td>";
  break;

  case "c":
   $retval .= "<td bgcolor=\"#0000FF\">c</td>";
  break;

  case "s":
   $retval .= "<td bgcolor=\"#FF0000\">s</td>";
  break;

 }

}

$retval .= "</tr>\n";


}

$retval .= "</table>";

?>

 

fikk jeg opp:

 


Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11

Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11

Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11

Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11

Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11

Notice: Uninitialized string offset: 7 in C:\Web\htdocs\map\index.php on line 11

Lenke til kommentar

lokaltog, jorgis: Hvordan skal man bruke str_replace her? Eksempler?

 

Trådstarter:

  • Har du lagt kartet i en fil kalt "map.txt" og plassert den i samme mappe som scriptet? Siden ingenting dukker opp.
     
  • Ordne "Notice: Uninitialized string offset: 9 in C:\Web\htdocs\map\index.php on line 11" ved å erstatte
    for( $i = 0; $i < strlen( $line ) + 1; $i++ )
     
    med
     
    for( $i = 0; $i < strlen( $line ); $i++ )

Nå skal det funke helt fint.

Lenke til kommentar

Har nevnt det med 2 eksempler over, men.. :roll:

 

Vi tar det med teskje:

<?php


$contents = file('map.txt') or die('Kunne ikke lese fra tekstfil.');

echo('<table>');

foreach($contents as $retval)
{
echo('<tr>');
$retval = str_replace('#', '<td bgcolor="#000000"> <td>', $retval);
$retval = str_replace('-', '<td bgcolor="#FFFFFF"> <td>', $retval);
$retval = str_replace('c', '<td bgcolor="#0000FF"> <td>', $retval);
$retval = str_replace('s', '<td bgcolor="#FF0000"> <td>', $retval);
echo($retval);
echo('</tr>');
}

echo('</table>');

?>

 

It's As Easy As That! :thumbup:

 

 

(Garanterer ikke bugfri kode)

Lenke til kommentar

<?

$map = file( 'map.txt' );

$retval = "<table>";

foreach ( $map as $line ) {

$retval .= "<tr>";

for( $i = 0; $i < strlen( $line ); $i++ ) {

$char = $line{$i};

switch ( $char ) {

 case "#":
  $retval .= "<td bgcolor=\"#000000\">#</td>";
 break;

 case "-":
  $retval .= "<td bgcolor=\"#FFFFFF\">-</td>";
 break;

 case "c":
  $retval .= "<td bgcolor=\"#0000FF\">c</td>";
 break;

 case "s":
  $retval .= "<td bgcolor=\"#FF0000\">s</td>";
 break;

}

}

$retval .= "</tr>\n";


}

$retval .= "</table>";

?>

 

Sånn ser det ut.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...