Toon posts:

Tekst file per regel woorden opsplitsen.

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Het volgende is de situatie.

Ik heb een tekst file gelever gekregen. Hier staan een aantal gegevens in geleverd. Deze gegevens zijn gescheiden door whitespaces. Ik denk tabs of gewoon spaties. Al deze gegevens wil ik appart per regel uitlezen en sorteren. Per regel staat namelijk nieuwe informatie. Voorbeeld->

102337 Test Dit is een test stukje.
102387 Test2 Dit is alweer een test stukje.


Als ik nu gewoon de file uitlees en op "\n" sorteer krijg ik wel alle regels terug. Maar dan zonder de overige whitespaces. Daar zijn nu allemaal enkele whitespaces van gemaakt. Heeft iemand misschien een idee hoe ik dit het beste kan aanpakken?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
welke taal gaat het over?

Verwijderd

Topicstarter
Het is de bedoeling dat ik dit in PHP ga doen.

  • tomato
  • Registratie: November 1999
  • Niet online
Hoe doe je het nu dan?

Verwijderd

Topicstarter
Doet het nu op de volgende manier.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
function leesRegelTabs()
{
   $file = "lijst.txt";
   $fp=fopen($file,"r");
   $content = fread($fp,filesize($file));
   fclose($fp);

// maak array met alle regels uit de file
  $lines = explode("\n",$content);
// voor elke regel do:
  for ($k=0; $k<count($lines); $k++)
  {
 // maak array met alle waarden uit een regel
    $values = explode("\t",$lines[$k]);
 // voor elke waarde do:
    for ($l=0; $l<count($values); $l++) {
  echo ("$values[$l]<br><BR>test");
  //
 }
}
}
?>

Dit kwam ik tegen toen ik een search deed. Maar dit helpt mij nog niet op weg.

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

euh... nutteloze reply

edit: sorry :)

  • wrotter18
  • Registratie: Oktober 2000
  • Laatst online: 07-10-2010

wrotter18

Freibuiters forever!

Je zou de file in Excel kunnen inlezen, of in Access.

Dan kun je zelf kiezen waar welke waarden of tekst in een kolom komt te staan. Er moet dan wel tussen elke waarde de zelfde ruimte of hetzelfde scheidingsteken zitten.

Je zou dan nu alles per kolom kunnen sorteren.

p.s.: Ik heb het ff snel geprobeerd met een simpele tekstfile:
1 waarde nummer
2 waarde2 nummer2
3 waarde3 nummer3

En deze opgeslagen als tekstfile [*.txt], deze kun je gewoon inladen. Tijdens het importeren wordt er gevraagd wat het scheidingsteken is, in dit geval de spatie.

Ik kreeg na deze handeling een Excel-blad met elke waarde in een aparte cel. :)

Cordelia: Well, does looking at guns make you wanna have sex? Xander: I'm seventeen. Looking at linoleum makes me wanna have sex.


Verwijderd

Topicstarter
Hmm dat is dus niet de bedoeling. Het aangeleverde tekstbestand komt denk ik uit excell en moet ik dus in php uitlezen en per regel opsplitsen. Dit opsplitsen is van belang aangezien.
In de geleverde tekst file staat het begin van een kolom wel op een vaste plek. Maar zodra ik de file uitlees, is zeg maar de kolom indeling verdwenen.

  • 0rbit
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:33
Kijk eens bij explode()

En lees vooral gewoon http://www.php.net eens door... Echt alles staat er :)

Ik ben geheel voldaan, dank u wel!


Verwijderd

Topicstarter
Ik weet het. Waar denk je dat ik mee begonnen ben. Anders had ik het heus niet gevraagd.

  • tomato
  • Registratie: November 1999
  • Niet online
Wat is precies het probleem dan nog? Als ik je nu code zou geven zou het vrijwel hetzelfde doen als het stukje code dat je al hebt, dus misschien kun je vertellen wat daar nog mis mee gaat? Anders begrijp ik je vraag niet goed...

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

Allereerst: http://www.php.net/manual/en/function.explode.php En lees ook het commentaar!

Eerst doe je een explode voor de new-lines, das goed, maar daarna doe je per lijn een explode van de TAB. Why? Staat er wel ECHT een TAB, of is het gewoon een (of meer) spatie(s)?

Als het één spatie is, dan moet je exploden op spatie. Als het er meer zijn, moet je eerst de overtollige spaties weghalen.

Dit heb ik van de php site geplukt, misschien is het wat:
PHP:
1
2
3
4
5
6
7
8
<?
function tc_explode ($token, $string)
{ 
  $regex = preg_quote ($token); 
  $string = preg_replace("/$regex+/", $token, $string); 
  return explode($token, $string); 
} 
?>

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Verwijderd

Topicstarter
Wat mijn code goed doet zeg maar is dat hij de file netjes inleest. Wat er fout gaat is dat ik per kolom de strings in een array of iets dergelijks wil hebben.

De geleverde tekstfile ziet er als volgt uit:

12301230Hallo Dit is een Test EN dit is kolom3
12301130HalloX Dit is een Test EN dit is kolom4

Als ik nu regel voor regel de file in lees. Dan plakt hij dit allemaal achter elkaar. Nu heb ik geprobeerd om dit af te vangen per tab, maar zo te merken worden ze niet per tab gescheiden. Nu ben ik bezig het per meer dan 5 spaties af te vangen en daarna nog maals te sorteren. Voor de rest heb ik nog geen makkelijkere manier gevonden. Maar ik vroeg mij af of jullie misschien een beter oplossing weten voor mijn probleem. Aangezien ik het dus nog niet compleet af heb.
Wat mijn eigenlijke vraag is zeg maar. Kan ik de file inlezen regel voor regel zonder dat hij de tekst trimmed. Zodat ik gewoon een substring kan pakken aangezien de string op een vast punt beginnen.

Hmm ook hier worden de spaties getrimmed.. :( Tussen de kollomen staan dus bijvoorbeeld 8 spaties ofzo. Maar dit kan verschillen.

  • tomato
  • Registratie: November 1999
  • Niet online
PHP:
1
2
3
<?
$lines = file("mijnbestand.txt");
?>

Dan heb je een array met alle regels (er worden geen whitespaces getrimmed :?). Je kunt nu substr toepassen op ieder array element... bijvoorbeeld de eerste 6 karakters van de eerste regel:
PHP:
1
2
3
<?
$field = substr($lines, 0, 6);
?>

Ik heb het idee dat ik je probleem niet helemaal snap...

  • tomato
  • Registratie: November 1999
  • Niet online
TheJee: De geleverde tekstfile ziet er als volgt uit:
code:
1
2
12301230Hallo    Dit is een Test    EN dit is kolom3
12301130HalloX  Dit is een Test    EN dit is kolom4

Nu heb ik geprobeerd om dit af te vangen per tab, maar zo te merken worden ze niet per tab gescheiden. Nu ben ik bezig het per meer dan 5 spaties af te vangen en daarna nog maals te sorteren.

[..]

Kan ik de file inlezen regel voor regel zonder dat hij de tekst trimmed.

[..]

Zodat ik gewoon een substring kan pakken aangezien de string op een vast punt beginnen.
Ik kan hiervandaan niet raden hoe de velden gescheiden zijn. Ze beginnen op vaste punten zeg je? Bijvoorbeeld het derde veld van links begint altijd xx karakters vanaf het begin van de regel? Dan moet het niet zo'n probleem zijn.

Maar wat bedoel je nu precies met spaties die getrimmed worden? Welke spaties wil je houden en welke gaan er nu weg :?
Hmm ook hier worden de spaties getrimmed.. :( Tussen de kollomen staan dus bijvoorbeeld 8 spaties ofzo. Maar dit kan verschillen.
Maar nu staan er weer spaties tussen de kolommen? Ik neem aan dat je deze spaties niet wilt hebben :?

Verwijderd

Topicstarter
Nee die spaties tussen de kolommen wil ik niet hebben, maar als ik de hele string trim dan verdwijnen al mijn spaties. Dus ook tussen de gewone tekst die ik wel wil kunnen scheiden maar niet met behulp van spaties. Ik wil dus zeg maar alleen alles scheiden waar meer dan 2 spaties tussenstaan zeg maar. Ben nog geen ster in PHP dus weet nog niet alles.
Misschien dat dit enige verklaring geeft in waarom mijn vraagstelling zo slecht is. En het is ook al laat. Ik ga er maar eens in en ga morgen wel weer verder. In ieder geval bedankt voor de hulp tot nu toe.

  • tomato
  • Registratie: November 1999
  • Niet online
Ik begrijp nog niet precies wat je nu wilt, maar misschien wil je je fields op deze manier splitten:
PHP:
1
2
3
4
5
6
<?
$lines = file("mijnbestand.txt");

for ($i=0; $i<count($lines); $i++)
   $fields[$i] = preg_split("/ {2,}/", trim($lines[$i]);
?>
Pagina: 1