Avatar billede drc_666 Nybegynder
31. oktober 2005 - 10:55 Der er 12 kommentarer og
1 løsning

forkert linie skift ved skrivning til fil

følgende er  en delle af et større script hvis opgave er at lave en sql fil til at opdatere mysql database med.
mit problem lægger i når jeg skal skrive til filen kommer linieskiftet for forkert skriptet er som følgende


$lines = file('../prisliste.php');


$filename = 'vareliste.txt';

for($ii=0; $ii<count($lines); $ii++) {
   
    $new_line = format_line($lines[$ii]);
   
    $pieces = explode(",", $new_line);

   

    $somecontent = "(, '".$pieces[0]."', '".$pieces[1]."', '".$pieces[2]."', '".$pieces[3]."', '".$pieces[4]."', '".$pieces[5]."', '".$pieces[6]."', '".$pieces[7]."', '".$pieces[8]."', '".$pieces[9]."', '".$pieces[10]."')";


    $fh = fopen($filename, "a");
    if ($fh) {
      fputs($fh, $somecontent);
      fclose($fh);
    }




}




en rigtig linie ser således ud (, '11"', '"/DU400"', '"/DU400"', '"Kyocera Mita"', '"Automatisk Duplexenhed fuld hastighed"', '"Passer til FS6020/N"', '3146.50', '0.00', '0.00', '310120051321', '')

men alle som sriptet ovenfor skriver i filen kommer til at se sådan ud
(, '11"', '"/DU400"', '"/DU400"', '"Kyocera Mita"', '"Automatisk Duplexenhed fuld hastighed"', '"Passer til FS6020/N"', '3146.50', '0.00', '0.00', '310120051321
', '')

vis der er nogen som kan komme med en nemmere løse på  hele skriptet er i velkommenen
skriptet skal gøre følgende
1 hentet data fra filen vareliste.php
2 køre det igennem funtionen format_line()
3 tvinge en download af en sql file eller sætte data directe ind i en db med det samme(der skal tages højde for at der i vareliste.php er godt over 7000 linie og den fylder ca 1 mb)

hele skriptet kommer her
Avatar billede drc_666 Nybegynder
31. oktober 2005 - 10:58 #1
glemte lige noget

<?
//require_once($_SERVER["DOCUMENT_ROOT"] . "/admin/header.php");




function format_line($line) {
    $offset = 1;
$new_line = "";
for($ii=0; $ii<substr($line, "\","); $ii++) {
    $pos = strpos($line, "\",", $offset);
    if($ii == 0) {
        $length = $pos - $offset;
    $start = $offset;
    } else {   
    $length = $pos - $offset - 2;
    $start = $offset + 2;
    }
    $sub_string = substr($line, $start, $length);
    $new_sub_string = str_replace(",", "&#44;", $sub_string);
    $new_line .= $new_sub_string.",";
$offset = $pos;
$offset++;
}
$length = strlen($line) - $offset;
$new_line .= substr($line, $offset+1, $length-1);
Return $new_line;
}

$lines = file('../prisliste.php');


$filename = 'vareliste.txt';

for($ii=0; $ii<count($lines); $ii++) {
   
    $new_line = format_line($lines[$ii]);
   
    $pieces = explode(",", $new_line);

   

    $somecontent = "(, '".$pieces[0]."', '".$pieces[1]."', '".$pieces[2]."', '".$pieces[3]."', '".$pieces[4]."', '".$pieces[5]."', '".$pieces[6]."', '".$pieces[7]."', '".$pieces[8]."', '".$pieces[9]."', '".$pieces[10]."')";


    $fh = fopen($filename, "a");
    if ($fh) {
      fputs($fh, $somecontent);
      fclose($fh);
    }




}











  $filename = "somefile.sql";
  $length = count( $filecontent );

  header( "Pragma: " );
  header( "Cache-Control: " );
  header( "Content-Length: $length" );
  header( "Content-Type: application/octet-stream" );
  header( "Content-disposition: attachment; filename=$filename" );
  header( "Content-Transfer-Encoding: binary" );
?>

DROP TABLE IF EXISTS vareliste_temp;
CREATE TABLE vareliste_temp (
  vare_nr int(11) NOT NULL auto_increment,
  rosenmeier_vare_nr varchar(255) NOT NULL default '',
  model varchar(255) NOT NULL default '',
  information text NOT NULL,
  specifikationer text NOT NULL,
  varegruppe varchar(11) NOT NULL default '',
  indkøbspris varchar(11) NOT NULL default '',
  udsalgspris varchar(11) NOT NULL default '',
  enhed varchar(11) NOT NULL default '',
  vægt varchar(11) NOT NULL default '',
  leveringstid varchar(11) NOT NULL default '',
  note varchar(255) NOT NULL default '',
  PRIMARY KEY  (vare_nr),
  FULLTEXT KEY beskrivelse_kort (information),
  FULLTEXT KEY beskrivelse_lang (specifikationer),
  FULLTEXT KEY model (model),
  FULLTEXT KEY model_2 (model),
  FULLTEXT KEY beskrivelse_kort_2 (information),
  FULLTEXT KEY beskrivelse_lang_2 (specifikationer)
) TYPE=MyISAM AUTO_INCREMENT=6264 ;


INSERT INTO vareliste_temp
(vare_nr, rosenmeier_vare_nr, model, information, specifikationer, varegruppe, indkøbspris, udsalgspris, enhed, vægt, leveringstid, note)
VALUES
read
<?
readfile(vareliste.txt)
Avatar billede coderdk Praktikant
31. oktober 2005 - 11:00 #2
Prøv at lave:

$pieces = explode(",", $new_line);

om til:

$pieces = explode(",", $new_line);
$an = count( $pieces );
for ( $a = 0; $a < $an; $a++ )
{
  $pieces[$a] = trim( $pieces[$a] );
}
Avatar billede erikjacobsen Ekspert
31. oktober 2005 - 11:00 #3
Du kan vist bare nøjes med at ændre

    $new_line = format_line($lines[$ii]);

til

    $new_line = trim(format_line($lines[$ii]));
Avatar billede coderdk Praktikant
31. oktober 2005 - 11:05 #4
Ja, det er da vist rigtigt :)
Avatar billede drc_666 Nybegynder
31. oktober 2005 - 11:17 #5
har fundet fejlen i data er der i nogle af felterne skrevet fx "passer til FS6020/N" som er skyld i de uheldige line skift har prøvet begge forslag ud det virker midt bedste bud er at udskifte /n med noget andet i format_line functionen men hvad skal jeg udskifte det med??
Avatar billede erikjacobsen Ekspert
31. oktober 2005 - 11:21 #6
Det er mig muligt at gennemskue hvad din  format_line gør. Men er vores løsninger ikke bare det du skal bruge for at løse det problem du beskriver?
Avatar billede coderdk Praktikant
31. oktober 2005 - 11:31 #7
Enig med Erik - Hvad gør din format_line? :)
Avatar billede erikjacobsen Ekspert
31. oktober 2005 - 11:34 #8
Ok, coderdk, er det muligt for dig et gennemskue?  Jeg mente "umuligt" - dumme tastatur.

Kan du give eksempler på hvad der kommer ind i den funktion, og hvad der så skal ud igen?
Avatar billede drc_666 Nybegynder
31. oktober 2005 - 11:46 #9
min vareliste får jeg fra min levarandør og den for det føsrte opdelt med komma, istedet for semikolon; det giver nogle problemmer da der i varebeskrivelsen er brugt kommaer. for det andet er felter med tekst indrammet med "" og felter kun med tal har ikke nogen indramning og så har jeg lavet format_line til at finde kommaer som ikke har "" lige på hver side og som er del af en indrammet teks, for så at lave dem om til en html værdi som ikke øddelægger noget af
Avatar billede erikjacobsen Ekspert
31. oktober 2005 - 12:16 #10
http://php.net/fgetcsv kan typisk lave arbejdet for dig.
Avatar billede drc_666 Nybegynder
31. oktober 2005 - 12:32 #11
lyder som noget jeg vil kikke på i aften
Avatar billede drc_666 Nybegynder
15. november 2005 - 11:56 #12
lukker
Avatar billede drc_666 Nybegynder
25. december 2005 - 22:13 #13
fant en anden løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester