Gå til innhold

Tabeller fra text fil.


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

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>";

Skrevet

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.

Skrevet
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:

Skrevet

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.

Skrevet
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. :)

Skrevet (endret)

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
Skrevet

Det er jeg helt enig i! Men når man ikke har variabler som skal settes inn i koden mener jeg at det er enklere å bruke ' så du slipper å escape HTML-kode unødvendig.. Enig? :D

Skrevet

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:

Skrevet

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

Skrevet

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.

Skrevet

jeg endret det til sånn du sa, men nå får jeg opp ingen ting.

map.txt ligger i den samme mappen som .php filen.

Skrevet

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)

Skrevet
jeg endret det til sånn du sa, men nå får jeg opp ingen ting.

map.txt ligger i den samme mappen som .php filen.

Hvordan ser scriptet ditt ut?

Skrevet

<?

$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.

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å
×
×
  • Opprett ny...