Just nu i M3-nätverket
Gå till innehåll

"c" söka info i txt


Morty

Rekommendera Poster

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

 

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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[] {'.'});

 

Länk till kommentar
Dela på andra webbplatser

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

 

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...