Just nu i M3-nätverket
Jump to content

"c" söka info i txt


Morty

Recommended Posts

jag har ett dokument dä'r jag vill söka efter och skriva ut eller använda mig av information som börjar på ex #GPRWD

sen vill jag kunna söka på det som kommer efter varje kommatecken ","

ex. #GPRWD, 12.345.55W, 2006.10.11, osv.

inte göra en länkad lista utan kunna söka igenom dokumentet i ett enda svep.

 

hjälp tack

 

Link to comment
Share on other sites

Nu skriver du ju inte hur din text är lagrad men om den finns i en c-sträng (char*) kan du använda funktionen strstr() för att söka efter #GPRWD och sedan enkelt plussa på 7 fär att peka ut det som kommer efter kommatecknet som följer #GPRWD.

 

Link to comment
Share on other sites

Då kan du använda dig av fopen() för att öppna filen, fgets() för att läsa in den en rad i taget och slutligen fclose() för att stänga filen.

 

char* line = "#GPRWD, 12.345.55W, 2006.10.11";
if(strcmp(line, "#GPRWD")==0)
{
 // Gör det du ska göra med de raderna.
 char tmp[100];
 strncpy(tmp, line+10, 8);
 tmp[8] = '0';
 // Gör nåt med strängen i tmp.
}

 

[inlägget ändrat 2006-11-22 14:50:28 av lizardKng]

Link to comment
Share on other sites

Hej

 

Jag föreslår att du ändrar lite i koden ovan så jämförelsen blir korrekt:

if(strncmp(line, "#GPRWD",6)==0)

 

Sedan har jag en följdfråga på detta (gillar inte att kidnappa trådar, men jag har ju även tillfört något här så det kanske är befogat :))

 

Någon som har en bra idé på hur man gör som ovanstående, men istället för att "veta" teckenpositioner etc så vill jag söka efter en viss rad, och sedan splitta resterande (kommaseparerade) text på raden till array. Alltså samma funktion som i VB heter split helt enkelt.

Jag har gjort sådant förut, men det blir ju en del kodande bara för att splitta till en kommaseparerad sträng, så nu undrar jag om någon har en enklare lösning? Poäng såklart, och återigen förlåt för kidnappningen.

 

G

 

Link to comment
Share on other sites

Tackar :)

 

Som bonus kan jag bjuda på .NET-varianten, men då blir det ju C++:

 

String^ line = "rehge.hgrhe.hr.hre.rgrgrbhw";
array<String^>^ words = line->Split(new Char[] {'.'});

 

Link to comment
Share on other sites

Trevligt, tack själv :-)

 

Men man kan ju konstatera att det är betydligt enklare i vb och .net att åstadkomma sånt där. Men lite pyssel förgyller ju alltid vardagen.

 

G

 

 

Link to comment
Share on other sites

Japp.

 

Ska bara korrigera till

 

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
 String^ delim = args[1];
 String^ line = args[0];
 array<String^>^ words = line->Split(delim->ToCharArray());
 for each (String^ s in words)
 {
	 Console::WriteLine(s);
 }
   return 0;
}

 

Att man aldrig lär sig att alltid provköra exempel först :)

 

[inlägget ändrat 2006-11-22 17:16:15 av lizardKng]

Link to comment
Share on other sites

char *token;

char line[] = "#GPRWD, 12.345.55W, 2006.10.11";

char sep[] = ",";

char *ar[10];

int i;

 

if(strncmp(line, "#GPRWD",6)==0)

 

{

// Gör det du ska göra med de raderna.

char tmp[100];

strncpy(tmp, line+10, 8);

token = (char *)strtok(line, sep); /* Get the first token */

 

if(!token) {

//no tokens returned

return( -1 );

}

 

while( token != NULL ) { /* While valid tokens are returned */

i++;

sprintf(&ar,"%s",token);

token = (char *)strtok(NULL, sep); /* Get the next token */

}

 

}

return 0;

[inlägget ändrat 2006-11-22 17:26:16 av gondor lias]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...