Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung C und C++

Anzahl Zeichen eine Zeile herausfinden.

Mitglied: raphidue

raphidue (Level 1) - Jetzt verbinden

11.06.2012, aktualisiert 21:56 Uhr, 3698 Aufrufe, 9 Kommentare

Hallo zusammen,
ich benötige eine Funktion mit der ich ermitteln kann wieviel Zeichen in einer Zeile sind. Da ich gerade einen Hänger habe und nicht weiterkomme möchte ich hier fragen.

Meine While-Schleife:
01.
while (fgets(current_line, C_value + 1, stdin) != NULL)
Diese liet von der Eingabe(stdin) eine Anzahl von Zeichen ein, die Anzahl der Zeichen die eingelesen werden, wird durch "C_value+1" bestimmt. Maximal ließt diese Schleife jeweils bis zu einem Newline oder EOF.

Nun möchte ich herausfinden wieviele Zeichen die Zeile tatsächlich hat.
In Prinzip möchte ich es einfach irgndwie anstellen womit ich abfragen kann wieviele Zeichen die Zeile tatsächlich hat, sodass ich diese Abfrage machen kann:
01.
if(C_value < ANZAHLZEICHENDERZEILE) 
.

Vielen Dank
Greeze raphidue
Mitglied: Kaioshin
11.06.2012 um 23:30 Uhr
Hallo raphidue

Folgendes Beispiel:

01.
#include <iostream> 
02.
#include <string> 
03.
using namespace std; 
04.
 
05.
int main() { 
06.
	string input; 
07.
	cout << "Zeile eingeben: "; 
08.
	getline(cin, input); 
09.
	cout << "Länge: " << input.size() << endl; 
10.
 
11.
	return 0; 
12.
13.
 
Eingelesen wird mit der getline() Funktion und die Länge des Strings wird mit der Funktion size() ausgelesen.
Löst das vieleicht dein Problem?


Kaioshin
Bitte warten ..
Mitglied: raphidue
11.06.2012 um 23:44 Uhr
Zitat von Kaioshin:
Hallo raphidue

Folgendes Beispiel:

01.
> #include <iostream> 
02.
> #include <string> 
03.
> using namespace std; 
04.
>  
05.
> int main() { 
06.
> 	string input; 
07.
> 	cout << "Zeile eingeben: "; 
08.
> 	getline(cin, input); 
09.
> 	cout << "Länge: " << input.size() << endl; 
10.
>  
11.
> 	return 0; 
12.
> } 
13.
>  
14.
> 
Eingelesen wird mit der getline() Funktion und die Länge des Strings wird mit der Funktion size() ausgelesen.
Löst das vieleicht dein Problem?


Kaioshin

Ich bräuchte das Ganze in Ansi C
Bitte warten ..
Mitglied: rubberman
12.06.2012 um 00:41 Uhr
Hallo raphidue,

da du mit fgets() ja gerade dabei bist eine Zeile aus dem Filestream einzulesen, kannst du nicht vorher schon wissen wie lang die Zeile ist.
Da die Anzahl der eingelesenen Zeichen vom Typ int ist (siehe Funktionsreferenz), kannst du ein Buffer-Array der Länge INT_MAX (limits.h) anlegen.

Anderer Ansatz:
read line from file without knowing the line length

Grüße
rubberman
Bitte warten ..
Mitglied: raphidue
12.06.2012 um 00:48 Uhr
Zitat von rubberman:
Hallo raphidue,

da du mit fgets() ja gerade dabei bist eine Zeile aus dem Filestream einzulesen, kannst du nicht vorher schon wissen wie lang die
Zeile ist.
Da die Anzahl der eingelesenen Zeichen vom Typ int ist (siehe Funktionsreferenz), kannst du ein Buffer-Array der Länge
INT_MAX (limits.h) anlegen.

Anderer Ansatz:
[http://stackoverflow.com/questions/2532425/read-line-from-file-without-knowing-the-line-length read line from file without
knowing the line length]

Grüße
rubberman

Ok Danke. Dann versuch ich es mal anders umzuformen, da ich mit dem Wert von C_value ja quasi festlege auf wieviele Zeichen ich mich in einer Zeile beschränke möchtei ich die While schleife nun so abändern dass nur bis zur Anzahl von C_value eingelesen wird alls was danach kommt soll abgeschnitten werden bis die Neue Zeile beginnt. Beispieltext:
Hallo
Text
Falls ich jetzt den C_value (Columns value) auf 3 setze, sollte folgende Zeichen eingelesen werdden:
Hal
Tex
So wie die Whileschleife momentan ist wird das ganze so realisiert:
Hal
lo
Tex
t
Bitte warten ..
Mitglied: rubberman
12.06.2012, aktualisiert um 01:05 Uhr
Hallo raphidue,

die gesamte Zeile einlesen und danach zuschneiden? strncpy() sollte hilfreich sein.

Grüße
rubberman
Bitte warten ..
Mitglied: raphidue
12.06.2012, aktualisiert um 09:13 Uhr
Zitat von rubberman:
Hallo raphidue,

die gesamte Zeile einlesen und danach zuschneiden? strncpy() sollte hilfreich sein.

Grüße
rubberman

Ich bräuchte einfach eine while -Schleife welches mir nur bis zur einer Schranke die ich angebe (im Obigen Beispiel C_value +1) die Zeilen einließt.
Zum Beispiel folgender INPUT:

Hallo World
Test

benutzerdefinierte Schranke Anzahl Zeichen(C_value) = 3, dann sollen nun folgende Zeichen eingelesen werden:

Hal
Tes

und NICHT!:

Hal
lo
Wor
ld
Tes
t
Bitte warten ..
Mitglied: rubberman
12.06.2012, aktualisiert 13.06.2012
Hallo raphidue,

ich glaube ich hab's verstanden. Der stdin Buffer wird weiter ausgelesen ...
Teste mal Folgendes:
01.
int main(void) 
02.
03.
  int C_value = 3; 
04.
  char current_line[C_value + 1]; 
05.
  int ch = 0; 
06.
 
07.
  while (fgets(current_line, C_value + 1, stdin) != NULL) 
08.
09.
      if(current_line[strlen(current_line) - 1] == '\n') 
10.
        current_line[strlen(current_line) - 1] = '\0'; 
11.
      else 
12.
        while((ch = getc(stdin)) != '\n' && ch != EOF) continue; 
13.
      printf("___%s___\n", current_line); 
14.
15.
  return 0; 
16.
}
Grüße
rubberman

<edit: Buffergröße korrigiert, auf getc() umgeschwenkt />
Bitte warten ..
Mitglied: raphidue
13.06.2012 um 13:12 Uhr
Zitat von rubberman:
Hallo raphidue,

ich glaube ich hab's verstanden. Der stdin Buffer wird weiter ausgelesen ...
Teste mal Folgendes:
01.
> int main(void) 
02.
> { 
03.
>   int C_value = 3; 
04.
>   char current_line[C_value + 1]; 
05.
>   int ch = 0; 
06.
>  
07.
>   while (fgets(current_line, C_value + 1, stdin) != NULL) 
08.
>     { 
09.
>       if(current_line[strlen(current_line) - 1] == '\n') 
10.
>         current_line[strlen(current_line) - 1] = '\0'; 
11.
>       else 
12.
>         while((ch = getc(stdin)) != '\n' && ch != EOF) continue; 
13.
>       printf("___%s___\n", current_line); 
14.
>     } 
15.
>   return 0; 
16.
> } 
17.
> 
Grüße
rubberman

<edit: Buffergröße korrigiert, auf getc() umgeschwenkt ></edit:>

Danke füer deine Tatkräftige Unterstützung rubberman, ich habe selber eine Lösung gefunden und zwar direkt nach der while(fgets...) diese Abfrage gemacht
01.
if ((strlen (current_line)) == producer_args->C_value) 
02.
03.
	  while ((charbuf = getchar ()) != '\n' && charbuf != EOF); 
04.
	}
Bitte warten ..
Mitglied: rubberman
13.06.2012, aktualisiert um 21:04 Uhr
Hallo raphidue,

deine Lösung hat mindestens einen Punkt, bei dem das Ganze nicht so funktioniert, wie du willst. fgets() liest das abschließende '\n' (Enter) mit in das Array. Somit hast du also immer das '\n' in der Variable, wenn die Eingabe kürzer als C_value ist. Wenn das kein Problem darstellt, OK.
Aber wenn die Eingabe genau C_value - 1 lang ist, dann kommt das '\n' als letztes Element im Array ('\0' mal außen vor gelassen). strlen() spuckt dir also C_value als Länge aus. Somit kommt getchar() ins Spiel und wartet auf das nächste '\n' oder EOF. Das kommt aber erst mit der nächsten Eingabe, die somit komplett ignoriert wird.

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Vbs Anzahl gleicher Zeilen ermitteln
Frage von goodbytesBatch & Shell1 Kommentar

Hallo, in einem Array hab ich zehn mittels Semikolon getrennte Strings als Datensätze, die Datensätze sind durch vbCrLf getrennt. ...

VB for Applications
Excel Zelle auf bestimmte Anzahl von Zeichen begrenzen mit VBA
gelöst Frage von Anna2701VB for Applications8 Kommentare

Hallo zusammen, ich würde gerne eine Zelle einer Excel Tabelle auf 132 Zeichen begrenzen und der Rest der über ...

IDE & Editoren
UltraEdit mit Script die Anzahl Zeilen und Wörter ermitteln
gelöst Frage von newbie58IDE & Editoren2 Kommentare

Hallo, ich will im UltraEdit mittels Script von einer Textdatei die Anzahl der Zeilen und Wörter ermitteln. Wie müsste ...

Batch & Shell
Mehrere Zeilen aus einer Anzahl von Textdateien per Batch entfernen
gelöst Frage von lukeskywalker501Batch & Shell4 Kommentare

Hi Leute, erst mal ein dickes moin an euch ! Ich habe folgende Sache und hoffe das ihr mir ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen7 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...