Ska hämta information ifrån ett kundkort, kunden skriver sitt kundnr. och sedan ska han få information om ordrar...
Textfilen ser ut som följer, varje kund börjar med:
NY
123(kundnr.)
345(ordernr.) 04-09-06 (datum)
567 (prodnr.) mjölk mellan 30 liter
allt är separerat med tabb, sedan följer alla ordrar till nästa kund
alltså...
NY
Hur gör jag för att lista allt mellan två NY där kundnr. stämmer med det som skickas ifrån ett formulär?
Någon som har ett tips?
Är det file() som gäller eller, filen är på ca. 3000 rader.
Om jag nu använder koden nedan för att hämta ut tabb-separerad text
och får in det i en tabell, så har jag lite problem med att börja vid ett
bestämt kundnummer och sluta vid nästa NY.. Någon?
Tack, men då skriver man ju bara ut kundnummret och det som finns på
den raden, hur får jag den att skriva ut det okända antal rader som finns
tills nästa NY?
$filnamn = "/home/..../kunder.txt"; //Eller vad den nu heter
$filStr = file_get_contents($filnamn); //Ger hela innehållet i en string
$kunder = explode("NY", $filStr);
Då blir $kunder en vektor som innehåller strängar enl (*):
"
$kunder[3] = "
125
2_597<tab>2002-10-15
193-010<tab>Lim på rulle<tab>12<tab>ST
"
Sedan kan du göra all parsning inom de olika indexen i kunder.
(*) Om det finns något tecken (mellanslag, ny rad...) före NY kommer index 0 att innehålla dessa tecken. Om NY är de allra första tecknen så vet jag inte om index 0 blir tomma strängen eller första kunden. Borde gå lätt att testa...
Hur lyckas jag få in de olika värdena i variabler?? om jag kör något liknade detta:
foreach($kunder as $line) {
$fields = explode("\t", $line);
$A = $fields[0];
...
Så funkar det ju inte riktigt, eftersom det både är \n och \t som behövs...?
....Hur lyckas jag få in de olika värdena i variabler?? om jag kör något liknade detta:
foreach($kunder as $line) {
$fields = explode("\t", $line);
$A = $fields[0];
...
Så funkar det ju inte riktigt, eftersom det både är \n och \t som behövs...?
Det här fungerar nog även om det väl troligen inte är det mest effektiva sättet:
foreach($kunder as $line) {
$line = str_replace("\\n","\\t", trim($line)); //ersätter alla \\n med \\t
$fields = explode("\\t", $line);
$A = $fields[0];
...
}
Den andra möjligheten är att använda strtok:
foreach($kunder as $str) {
$str = trim($str);
$field = strtok($str, "\\n\\t"); //delar upp $str i de bitar som blir kvar utan \\n och \\t
while($field) {
$A = trim($field); //*
$field = strtok("\\n\\t"); //Den kommer ihåg $str och var den är i strängen
}
}
I stället för $A, $B ... kan du kanske stoppa dom i en vektor som du kan iterera dig fram över i whilesatsen....
Tack alla!! Fan, upptäckte precis att killen jag gör detta åt, hans webhotell har bara php version 4.1 så file_get_contents funkar inte...
Om jag går vidare med Mattes exempel så funkar det ju jätte bra att få ut en viss kunds data! Men då får jag problem att formatera texten snyggt, det bästa vore ju att få ut det radvis och sedan med en variabel för varje tab...
Tack alla!! Fan, upptäckte precis att killen jag gör detta åt, hans webhotell har bara php version 4.1 så file_get_contents funkar inte...
Om jag går vidare med Mattes exempel så funkar det ju jätte bra att få ut en viss kunds data! Men då får jag problem att formatera texten snyggt, det bästa vore ju att få ut det radvis och sedan med en variabel för varje tab...
Då är det väl bara att gå vidare med det:
$search = "123"; // Sökt kundnummer
$filename = 'textfil.txt';
$fp = fopen($filename, 'r');
$content = fread($fp, filesize($filename));
fclose($fp);
preg_match("/NY\\s+($search\\s+.*?)(NY|$)/s", $content, $match);
$item = preg_split("/\\n/", trim($match[1]));
for ($i=0; $i<count($item); $i++) {
$item[$i] = explode("\\t", trim($item[$i]));
}
// Endast för att i exemplet visa innehållet i arrayen
echo "<pre>";
print_r($item);
echo "</pre>";
Tar upp denna tråden då jag ska spinna vidare med ett liknande problem...
Om jag nu tar mitt accepterade svar (ovan) och vill lista alla unika, hur göra? Finns det något sätt att som när man hämtar ifrån en databas använda distinct, eller något liknande?
(Jag har gjort en select i loopen men vill bara lista unika kategorier...)
261 ms totalt · 4 externa anrop · v20260731065814-full.2d97a731